震惊吧!下面的代码有什么问题?都不是 LEFT JOIN
与 NULL
正在选择 Null
行,也不是mysql !=
运算符仅显示不匹配的行
两张table
表 book
-书单
id | ttl
===========
1 | Science
2 | Math
3 | English
表 block_book
-分配给每个区块的书籍列表
id | block| book
=====================
1 | 1 | 1
2 | 1 | 2
现在,要求显示未分配给块的其余书籍。那我该怎么办
SELECT
book.id AS id, book.ttl AS book
FROM
block_book
JOIN
book ON book.id != block_book.book
GROUP BY book.id
与 !=
接线员应该在跟踪结果,不是吗?因为只有主题 English
不在表中 block_book
预期结果
id | book
===========
3 | English
但是所有的书都被选中了。当前结果
id | book
===========
1 | Science
2 | Math
3 | English
我试过了 Left JOIN
与 Null
```
SELECT
book.id AS id, book.ttl AS book
FROM
block_book
LEFT JOIN
book ON book.id = block_book.book
WHERE block_book.book IS NULL
但它什么也不回
sql小提琴
2条答案
按热度按时间kx1ctssn1#
你应该使用
right join
.所以这应该有效:
或者如果你想用
left join
,您应该这样编写查询:ewm0tg9j2#
现在,要求显示未分配给块的其余书籍。
最直接的方法是使用
NOT EXISTS
: