6

我有这样的表:

表格1:

id | item_name | entered_by | modify_by
1  | banana    |     2      |    1
2  | apple     |     4      |    3
3  | orance    |     1      |    1
4  | pineapple |     5      |    3
5  | grape     |     6      |    1

表2:

id | username 
1  | admin
2  | jack
3  | danny
4  | dummy
5  | john
6  | peter

如果 enter_by 或 modify_by 确实具有值,则查询可以正常选择:

SELECT t1.id, t1.item_name,
  t2enteredBy.username enteredBy,
  t2modifyBy.username modifyBy
FROM table1 t1
JOIN table2 t2enteredBy ON t1.entered_by = t2enteredBy.id
JOIN table2 t2modifyBy ON t1.modify_by = t2modifyBy.id

问题:如果modifiy_by或entered_by字段之一具有空值,则该行现在显示出来,如果它具有空值,我需要它显示为'-'而不是完全隐藏该行。

SQLFIDDLE 在这里

4

2 回答 2

6

试试这个:

SELECT t1.id, t1.item_name,
  COALESCE(t2enteredBy.username, '-') enteredBy,
  COALESCE(t2modifyBy.username, '-') modifyBy
FROM table1 t1
LEFT JOIN table2 t2enteredBy ON t1.entered_by = t2enteredBy.id
LEFT JOIN table2 t2modifyBy ON t1.modify_by = t2modifyBy.id

在这里拉小提琴。

您需要 aleft join返回那些带有null值的行。然后coalesce将确保它们被给定的字符串替换(如果它们是null.

于 2013-10-31T07:40:10.673 回答
1

试试这个 - 使用 LEFT JOIN 而不是 JOIN

SELECT t1.id, t1.item_name,ifnull(t2enteredBy.username,'-') enteredBy,
  ifnull(t2modifyBy.username,'-') modifyBy
FROM table1 t1
LEFT JOIN table2 t2enteredBy ON t1.entered_by = t2enteredBy.id
LEFT JOIN table2 t2modifyBy ON t1.modify_by = t2modifyBy.id

SQL小提琴在这里

于 2013-10-31T07:41:38.070 回答