从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查询:从PHP MySQL的SELECT语句中获取重复值,php,mysql,select,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,
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
如您所见,两个表中存在的值仅显示两次,而其他所有内容显示三次(可能是由于这两个表上的迭代)
有谁能解释一下如何使用这段代码,使它只返回不在两个表中的值(aka:2,4,5,6,8)
谢谢 有几种方法可以做到这一点 我更喜欢使用
不存在:
SELECT *
FROM ips i
WHERE NOT EXISTS (
SELECT 1
FROM oips o
WHERE i.ipublic = o.opublic)
以下是不在
中的:
SELECT *
FROM ips
WHERE ipublic NOT IN (SELECT opublic FROM oips)
这里有左连接/NULL
:
SELECT i.*
FROM ips i
LEFT JOIN opublic o ON i.ipublic = o.opublic
WHERE o.opublic IS NULL
“仅返回不在两个表中的值”与“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语句使用select distinct
。使用不在中、不存在
或左连接。其中=NULL
。