我目前在MySQL中运行此查询以检查指定的值是否存在 在与他们相关的表格内。
SELECT COUNT(artist.artist_id), COUNT(album.album_id), COUNT(tracks.track_id)
FROM artist, album, tracks WHERE artist.artist_id = 320295 OR album.album_id = 1234 OR tracks.track_id = 809
我从运行此查询得到的结果全是1,这意味着WHERE子句之后的所有语句都为true。为了进一步检查查询的可靠性,我将tracks.track_ = 809更改为802,我知道它不匹配。但是显示的结果仍然全部为1,这意味着即使我有目的地插入了一个不匹配的值,它们也都成功匹配。
如何让匹配显示1,同一查询中没有匹配0?
编辑:我已插入运行
的查询图像
答案 0 :(得分:0)
“或”条款可能是您的问题。如果任何WHERE子句有效,则您将得到一个非空的结果集。也许像SELECT COUNT(*)...... WHERE ... AND ... AND ...
但是查看整个PHP代码集会更有帮助。我建议运行三个不同的查询 - 不是因为它技术复杂,而是因为它更容易让它第一次正常工作!
答案 1 :(得分:0)
你在这里做的是连接三个表。当你看到这个SQL Fiddle时,你可以看到会发生什么。
在第一个选择中,我遗漏了count
,以显示联接的工作原理。当您将or
中的where子句修改为and
时,您还可以看到结果集的更改方式,如@RayPaseur所示。
我想,你想要的是三个独立的查询
select 'artist' as type, count(artist_id) as count
from artist
where artist_id = 320295
union
select 'album', count(album_id)
from album
where album_id = 1234
union
select 'track', count(track_id)
from tracks
where track_id = 809
成为
TYPE COUNT
artist 1
album 1
track 1
现在,当您将track_id = 809
更改为track_id = 802
时,您将获得
TYPE COUNT
artist 1
album 1
track 0
结果。