Mysql获取另一个表中不存在的数据

时间:2017-05-18 09:01:03

标签: mysql

我有四个mysql表

表1,t_source:

+--------+-------+
| cindex | cname |
+--------+-------+

表2,t_language:

+--------+-------+
| cindex | cname |
+--------+-------+

表3,r_src_cat:

+-----------+-----------+-------+
| src_index | lan_index | clink |
+-----------+-----------+-------+

表4,r_source:

+-----------+-----------+-------+
| src_index | lan_index | clink |
+-----------+-----------+-------+

我想从表3中检索clink,源和语言索引或名称 - r_src_cat,表4中没有 - r_source。为此,我使用以下查询:

SELECT
  r_src_cat.clink,
  t_source.cname,
  t_language.cname
FROM r_src_cat, r_source, t_source, t_language
WHERE r_src_cat.c_src_index != r_source.c_src_index
      AND r_src_cat.c_lan_index != r_source.c_lan_index
      AND t_source.cindex = r_src_cat.c_src_index
      AND t_language.cindex = r_src_cat.c_lan_index
ORDER BY r_src_cat.clink;

这给了我错误的结果。 r_source中大约有12条记录丢失,但结果是给了我无数的任何记录,多次显示相同的记录,并且该记录存在于表中。

请纠正我的疑问。

由于

EDIT ---

外键关系

表3,r_src_cat.src_index => t_source.cindex 表3,r_src_cat.lan_index => t_language.cindex

表4,r_source.src_index => t_source.cindex 表4,r_source.lan_index => t_language.cindex

编辑2 ----

通过不同的建议,我运行此查询

SELECT
  r_src_cat.c_src_index,
  r_src_cat.c_lan_index
FROM r_src_cat
  LEFT JOIN r_source ON r_src_cat.c_src_index = r_source.c_src_index
WHERE r_source.c_src_index IS NULL;

结果

352 0
352 0
352 0
352 0
352 0
352 0
352 0
352 0
352 0
352 0
352 0
338 0
338 0
569 0
569 0
569 0

此结果是正确的,但不完整。例如,我在表3上运行以下查询:

SELECT
  r_src_cat.c_src_index,
  r_src_cat.c_lan_index
FROM r_src_cat
WHERE r_src_cat.c_src_index = 535 AND r_src_cat.c_lan_index = 11;

显示一行的结果集。

现在对表4进行相同的查询 - r_source:

SELECT
  r_source.c_src_index,
  r_source.c_lan_index
FROM r_source
WHERE r_source.c_src_index = 535 AND r_source.c_lan_index = 11;

它返回并清空返回集。

因此组合535,11存在于表-3中,但不存在于表4中。但是在表3和表3中运行左连接查询时不存在相同的组合。 4上面提到的。

1 个答案:

答案 0 :(得分:-1)

据我所知,你的问题是,例如表A(表3)和B(表4)包含一些类似的数据,但您需要表B中没有的那些数据。

e.g。 A包含1,2,3,4,5      B含有1,2,3

所以你希望结果丢失,即4,5。

如果这是您的查询,请尝试此示例并根据您的要求进行修改:

SELECT A.col1, A.col2 FROM A LEFT JOIN B ON A.col1=B.col1 WHERE B.col1 IS NULL

希望这会有所帮助。