检查表是否与选择查询相同

时间:2014-03-03 15:50:46

标签: sql select equals

我有静态数据表(states(id, name))和表user_states(user_id, state_id)

我怎么知道表user_states中的某些用户(例如id = '11')是否都来自表states

如果表states有50个状态,则检查ID为“11”的用户是否具有全部50个状态。

我读了解解决方案,如何检查表的数据是否相同:

SELECT ul.location_id
FROM bt_user_location ul
    JOIN bt_location_region llr ON (ul.location_id = llr.id)
WHERE ul.user_id= 11
UNION
SELECT lr.id
FROM bt_location_region lr

如果此查询的计数行数大于此表中任何一个表的计数,则表不相同。但是,如果一个表与另一个表具有相同的行但不是全部,那么此查询将不会很好。

1 个答案:

答案 0 :(得分:0)

使用Group ByHaving

SELECT
    ul.user_id
    count(1)
FROM user_states
GROUP BY ul.user_id
HAVING count(1) = 50

这将计算每个用户拥有的状态数,并仅返回具有50个状态的用户。如果要检查特定用户,请添加Where子句。如果标识为11的用户没有全部50个状态,则不会返回任何行。

SELECT
    ul.user_id
    count(1)
FROM user_states
WHERE ul.user_id = 11
GROUP BY ul.user_id
HAVING count(1) = 50