我有四个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上面提到的。
答案 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
希望这会有所帮助。