Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从PHP MySQL的SELECT语句中获取重复值_Php_Mysql_Select - Fatal编程技术网

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

从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,

我的数据库有两个表: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
如您所见,两个表中存在的值仅显示两次,而其他所有内容显示三次(可能是由于这两个表上的迭代)

有谁能解释一下如何使用这段代码,使它只返回不在两个表中的值(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