0

我目前正在 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 子句之后的所有语句都是真的。为了进一步检查查询的可靠性,我将 track.track_ = 809 更改为 802,我知道这不匹配。但是显示的结果仍然都是 1,这意味着即使我故意插入了一个不匹配的值,它们也都成功匹配。

如何让它在同一查询中显示 1 表示匹配和 0 表示没有匹配?

编辑:我插入了正在运行的查询的图像

在此处输入图像描述

4

2 回答 2

0

“或”子句可能是您的问题。如果这些 WHERE 子句中的任何一个有效,您将获得一个不为空的结果集。也许像 SELECT COUNT(*)... WHERE... AND... AND...

但是查看整个 PHP 代码集会更有帮助。而且我建议运行三个不同的查询 - 不是因为它在技术上很复杂,而是因为它更容易在第一次就正常工作!

于 2012-12-16T23:00:30.500 回答
0

您在这里所做的是连接三个表。当您查看此SQL Fiddle时,您会看到发生了什么。

在第一个选择中,我省略了count, 以显示连接的工作原理。or当您按照and@RayPaseur 的建议修改 where 子句时,您还可以看到结果集如何变化。

我想,你想要的,实际上是三个独立的查询

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 。

于 2012-12-16T23:11:39.163 回答