Tables _________________________ _________________________ |__________items__________| |_______readStatus________| |___itemId___|____data____| |___itemId___|___status___| | 1 | cats | | 1 | 1 | | 2 | dogs | | 2 | 1 | | 3 | fish | | | | ------------------------- -------------------------
我有两个类似于上面显示的MySQL表。我需要从item
表中获取status
表中没有相应1
readStatus
的条目。因此,在此示例中,我需要data
为fish
的条目。我对SQL不是很熟悉,所以我不确定如何解决这个问题,但基于我提出的其他问题:
SELECT *
FROM items
INNER JOIN
readStatus
ON items.itemId = readStatus.itemId
WHERE readStatus.status != 1
这不起作用,因为它会跳过items
表中readStatus
表中没有匹配条目的任何条目。添加status
0
条目进行搜索不是一种选择,因为它最终会创建数百万条目。另外看起来,在phpMyAdmin中,它将条目合并到一个我不想要的输出中,但它不是一个破坏者。
感谢任何帮助。
答案 0 :(得分:4)
使用LEFT JOIN而不是INNER JOIN:
SELECT *
FROM items
LEFT JOIN //left join
readStatus
ON items.itemId = readStatus.itemId
WHERE (readStatus.status != 1 OR readStatus.status IS NULL);
阅读LEFT JOIN教程。
答案 1 :(得分:4)
实际上,这听起来像是用EXIST而不是(左)连接更好地解决的问题:
SELECT *
FROM items
WHERE NOT EXISTS ( SELECT *
FROM readStatus
WHERE items.itemId = readStatus.itemId
AND readStatus.status = 1 )
答案 2 :(得分:0)
SELECT * FROM items LEFT JOIN readStatus ON items.itemId = readStatus.itemId
WHERE readStatus.itemId IS NULL
答案 3 :(得分:0)
WHERE readStatus IS NULL或readStatus.status!= -1
答案 4 :(得分:0)
您必须使用LEFT JOIN
SELECT * FROM items LEFT JOIN readStatus ON items.itemId = readStatus.itemId and readStatus.status != 1;
这将如何运作。
从readStatus开始,只需要具有匹配的itemId并且不在状态1中的所有行wrom项目表。