我有這兩個表:如何爲每個帖子選擇作者的姓名?
// posts
+----+---------+------------------------+-----------+------------+
| id | title | content | author_id | visibility |
+----+---------+------------------------+-----------+------------+
| 1 | title1 | content1 | 3 | 1 |
| 2 | title2 | content2 | 2 | 0 |
+----+---------+------------------------+-----------+------------+
// users
+----+---------+----------+
| id | fname | lname |
+----+---------+----------+
| 1 | John | Tersco |
| 2 | Peter | Brlew |
| 3 | Jack | Keveinc |
+----+---------+----------+
我想這是預期輸出:
+----+---------+------------------------+--------------+
| id | title | content | full_name |
+----+---------+------------------------+--------------+
| 1 | title1 | content1 | Jack Keveinc |
| 2 | title2 | content2 | Unknown |
+----+---------+------------------------+--------------+
這裏是我當前的查詢:
SELECT p.id, p.title, p.content, CONCAT(u.fname, ' ', u.lname) as full_name
FROM posts p
LEFT JOIN users u
ON p.author_id = u.id AND p.visibility = 1
正如你看到的,我需要的是定義當p.visibility
等於0
時爲。我怎樣才能做到這一點?
我需要CASE
或COALESCE
或兩者嗎?
編輯:首先我要說的添Biegeleisen的答案是偉大的,所有的罰款。實際上,還有一列我需要像上面那樣對待它。但它沒有CONCAT
功能。例如:
// users
+----+---------+----------+------------+
| id | fname | lname | reputation |
+----+---------+----------+------------+
| 1 | John | Tersco | 943 |
| 2 | Peter | Brlew | 2300 |
| 3 | Jack | Keveinc | 84 |
+----+---------+----------+------------+
這是預期的結果:
+----+---------+------------------------+--------------+------------+
| id | title | content | full_name | reputation |
+----+---------+------------------------+--------------+------------+
| 1 | title1 | content1 | Jack Keveinc | 84 |
| 2 | title2 | content2 | Unknown | N |
+----+---------+------------------------+--------------+------------+
好吧,我只想知道:還有我可以用COALESCE
爲reputation
列? (它沒有CONCAT
)
SELECT COALESECE(reputation, 'N') reputation, ....
它是罰款?或者因爲它沒有CONCAT
那麼我必須使用CASE
呢?
最好的答案,這是最好的有'p.visibility = 1'在加入本身,所以你不包括所有行'p.visibility = 0' – DerpyNerd
如果我刪除CASE,會發生什麼情況?我想這是多餘的。我的意思是使用COALESCE就夠了,不是嗎? –
@MartinAJ你說得對,'COALESCE'就夠了。 –