Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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
Mysql 左联接不工作-获取记录不在其他表中_Mysql_Join - Fatal编程技术网

Mysql 左联接不工作-获取记录不在其他表中

Mysql 左联接不工作-获取记录不在其他表中,mysql,join,Mysql,Join,我觉得很奇怪,因为每个其他答案都说它有效,但我无法得到正确的结果: table A: id_num, name<br> table B: id_num table A has index on name, but not unique. id_num is unique in this table.<br> table B has index on id_num, but not unique. 它返回的名称在表b中,有些不在表b中 这也不起作用: **SELECT

我觉得很奇怪,因为每个其他答案都说它有效,但我无法得到正确的结果:

table A: id_num, name<br>
table B: id_num

table A has index on name, but not unique. id_num is unique in this table.<br>
table B has index on id_num, but not unique.
它返回的名称在表b中,有些不在表b中

这也不起作用:

**SELECT distinct(a.name) 
FROM a where a.id_num 
not in (select distinct(b.id_num) from b  )**
我无法理解,当SQL表示NOT IN时,a.names是如何返回表B中的哪些人的。 我错过了什么

谢谢

通过右键,左键连接应该可以工作。以及在

这是一个样本。因此,您可能希望发布并显示表模式和数据,以便对您的问题进行更公正的处理。最好是在SQLFIDLE上创建表并显示引用

以下是示例:-

示例表: 表1:

表2:

查询:

select * from tab1
where col1 not in 
(select distinct col4 from tab2)
;
结果:

COL1    COL2
1       john
4       rose
根据OP的更新意见和表格结构 OP提到表tab1将有多个同名记录。根据他最初的表设计,表tab2中没有NAME字段。如果OP最初提供了预期的结果,这也是非常值得推荐的。 * OP的表格数据:

COL1    COL2
1       john
2       tim
3       jack
4       rose
5       john
6       john

COL3    COL4
1       2
2       3
3       5
4       5
5       2
6       6
查询:当您不想要任何重复的名称时

结果:这是Rose,这是唯一没有重复的记录,并且在tab2中不存在

试试这个

    select t1.name from table1 t1
     where t1.name not in 
               (select t2.name from table2 t2 )
看看

编辑:

如果您的第二个表中只有id_num,请查看


你能为每个表发布一些数据吗?列名,一些数据和你想要得到的结果。WHERE b.id\u numb打字错误是这样的,还是在你的实际代码中?开始时更简单,以了解你的查询在做什么。首先运行如下操作:从左连接中选择a.id\u num、a.name、b.id\u num,然后在a.id\u num=b.id\u num**上连接b,查看此结果是否与您认为应该的结果一致,然后添加where子句。另外,Benjam@user1864734之前的评论,我刚刚发布了以下内容作为参考和示例供您评论。所以这里的每个人都能理解你的问题。所以这不是你问题的直接答案好吧。。。所以我在原始问题中的查询是有效的,就像这个一样。我意识到数据结果是正确的,但我现在才知道问题出在哪里。原因:在上面的tab1中,假设有多个john记录5、john和6,john在tab2中只添加一个john记录6,6=>john不再出现在结果中,但我知道tab2中不存在两个john记录。我错过了第三张唱片。我只是看名字,没有看身份证和名字。所以我不知道如何得到我想要的结果。这是为了在tab2中没有名称。我尝试了这个方法,但没有不同的结果:从tab1中选择distinctcol2,其中tab1.col1不在tab2的group by中选择distinctcol3col2@user1864734查询还取决于您设计表架构和关系的方式:例如,如果您提到您有多个john,那么我们肯定会提出质疑来支持这一点。我的回答是让你提高警惕。这些表是标准化的。当您有多个Johns时,建议放置适当的主键-可能是复合键。请查看更新的版本:谢谢因为你把名字不放在。。。这让我想到了解决办法@goodmood根据您的解决方案,OP必须通过添加名称列来更改表2。在他的原始表模式中,只有id@user1864734查看我编辑的答案。如果这有助于你确保接受答案。
COL1    COL2
1       john
4       rose
COL1    COL2
1       john
2       tim
3       jack
4       rose
5       john
6       john

COL3    COL4
1       2
2       3
3       5
4       5
5       2
6       6
select t.col1, t.col2
from tab1 t
join 
 (select t1.col2, count(*) as counts 
  from tab1 t1
  group by t1.col2
  having count(*) = 1) x
on t.col2 = x.col2
where t.col1 not in 
 (select distinct col4 from tab2)
;
COL1    COL2
4       rose
    select t1.name from table1 t1
     where t1.name not in 
               (select t2.name from table2 t2 )