从两个表中进行选择而没有一些记录

时间:2018-10-24 18:01:25

标签: mysql sql database

我有两个表:

t1 contain ID_car (unique), name 
t2 contain ID_car(from t1), status (many status records on same ID_car)

我需要以下结果:

All ID_car FROM t1 WITHOUT status = something

我已经尝试过INNER,LEFT,RIGHT JOIN,但没有用。 我怎样才能做到这一点? 非常感谢您的帮助!

更多详细信息:

t1
------------
ID_car      name
------------------
1           Toyota
2           Honda
3           Mazda
4           Ford


t2
-----------------
ID_car      status
1           ok
1           not_ok
2           ok
4           not_ok

ID_car 3 din在t2中没有任何记录,但我想显示结果

我需要以下结果(从t1起的所有汽车都没有汽车状态not_ok)

the expected result
-----------------
ID_car      status
2           ok
3

更新2 终于解决了!感谢帮助! 这对我有用:

    SELECT * FROM t1 
WHERE t1.ID_auto NOT IN 
(SELECT DISTINCT t1.ID_auto FROM t1, t2 WHERE t1.ID_auto = t2.ID_auto AND t2.category='not_ok')

4 个答案:

答案 0 :(得分:0)

 SELECT ID_car
   FROM t1
   LEFT JOIN t2
     ON t1.ID_car=t2.ID_car
  WHERE t2.status=something

答案 1 :(得分:0)

-根据下面的评论更新。此更新将返回T2中的所有记录(即使T1中不存在),但仅当T2.Status!=某物时

-这应该做您想要的。它将为您提供T1中的所有记录以及T2中的任何数据(但不是必须在该表中),而您的T1.status并不是必需的

SELECT *
FROM t1 
LEFT JOIN t2 ON T1.ID = T2.ID 
-- did the logic on the JOIN here instead of in where clause, because doing in where clause would force records to appear in t2 table (basically converting it to an inner join) doing it in the join itself does not cause this to happen
AND T2.Status != 'something'

答案 2 :(得分:0)

SELECT ID_car
FROM t1
  LEFT JOIN
     t2 on t1.ID_car=t2.ID_car
WHERE NOT t2.status='something'

从头开始创建,希望它能起作用!

也许您可以发布您编写的查询,也许它们可以向我们展示为什么联接不起作用,因为它应该起作用。

答案 3 :(得分:0)

我不知道我是否正确理解,但请尝试让我知道:

SELECT DISTINCT t1.ID_car FROM t2  INNER JOIN t1 ON t2.ID_car = t1.ID_car WHERE t2.status != 'something'