从PHP MySQL的SELECT语句中获取重复值

时间:2014-09-19 00:52:20

标签: php mysql select

我的数据库有两个表:ips,oips

ips.public字段包含值:1,2,3,4,5,6,7,8

oips.public字段包含值:1,3,7

我想选择ips.public中未出现在oips.public

中的所有值

我在PHP中使用以下MySQL查询:

SELECT * FROM ips, oips WHERE ips_ips.public != oips.public

这将返回以下内容:

1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 8, 8, 8

正如您所看到的,两个表中存在的值仅显示两次,而其他所有值都显示三次(可能是由于这两个表上的迭代)。

请有人详细说明如何使用此代码,以便它只返回两个表中都没有的值(又名:2,4,5,6,8)

谢谢!

2 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点。

我更喜欢使用NOT EXISTS

SELECT *
FROM ips i
WHERE NOT EXISTS (
    SELECT 1
    FROM oips o
    WHERE i.ipublic = o.opublic)

此处NOT IN

SELECT *
FROM ips
WHERE ipublic NOT IN (SELECT opublic FROM oips)

这里LEFT JOIN/NULL

SELECT i.*
FROM ips i
    LEFT JOIN opublic o ON  i.ipublic = o.opublic
WHERE o.opublic IS NULL

答案 1 :(得分:0)

“仅返回不在两个表中的值”“ips.public中未出现在oips.public中的所有值”不同

下面的查询将显示两个表中都没有的所有公共值。

select public from (
    select public from ips
    union all
    select public from oips
) t1 group by public
having count(*) = 1

如果public可以在每个表中重复,请使用select distinct作为内部选择语句。