即使另一个表中不存在记录,如何显示行?

时间:2015-04-17 23:57:35

标签: mysql sql sql-server

我有一张叫做书籍的桌子

books
 - bookid
 - userid(fk)
 - bookname

我有一张名为付费的表

paid
 - paidid(pk)
 - userid(fk)
 - link
 - bookid(fk)

我的查询:

SELECT * 
FROM books,paid
WHERE books.bookid = paid.bookidfk
AND books.useridfk = '$userid'";

仅显示已付费的记录,但即使没有付费,我仍希望显示用户的所有图书。

2 个答案:

答案 0 :(得分:1)

听起来你正在寻找outer join

select *
from books b
   left join paid p on b.bookid = p.bookidfk
where b.useridfk = '$userid';

答案 1 :(得分:0)

您可以使用LEFT JOIN返回用户的所有图书以及付费数据(如果有)。 ANSI 92语法:

SELECT  *
FROM    books
        LEFT JOIN paid ON books.bookid = paid.bookidfk
WHERE   books.useridfk = '$userid';

我建议您避免在生产代码中使用*简写,而是指定所需的列列表。