检查多个表中是否存在数据

时间:2012-12-16 22:49:58

标签: php mysql count

我目前在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?

编辑:我已插入运行

的查询图像

enter image description here

2 个答案:

答案 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

结果。

SQL Fiddle玩。