Mysql获取另一个表中不存在的数据
我有四张mysql表 表1,t_来源:Mysql获取另一个表中不存在的数据,mysql,Mysql,我有四张mysql表 表1,t_来源: +--------+-------+ | cindex | cname | +--------+-------+ 表2,t_语言: +--------+-------+ | cindex | cname | +--------+-------+ 表3,r_src_类别: +-----------+-----------+-------+ | src_index | lan_index | clink | +-----------+-----------
+--------+-------+
| cindex | cname |
+--------+-------+
表2,t_语言:
+--------+-------+
| cindex | cname |
+--------+-------+
表3,r_src_类别:
+-----------+-----------+-------+
| src_index | lan_index | clink |
+-----------+-----------+-------+
表4,r_来源:
+-----------+-----------+-------+
| src_index | lan_index | clink |
+-----------+-----------+-------+
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;
我想从表3-r_src_cat中检索clink、source和language索引或名称,它们在表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_源中大约有12条记录丢失,但结果给了我无限多条记录多次显示同一条记录,并且该记录出现在表中
请纠正我的疑问
谢谢
编辑---
对外关系
表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_来源:
+-----------+-----------+-------+
| src_index | lan_index | clink |
+-----------+-----------+-------+
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和表4上运行左连接查询时,不存在相同的组合。据我所知,您的问题是,例如,表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
希望这会有所帮助。您能显示表的外键关系吗?使用左连接并获取包含空值的记录值。在询问…@Shadow之前,您确实可以使用问题标题中的表达式进行搜索,我已经试过了,但没有任何效果result@MaheshMadushanka你能帮我写问题吗?我在写我的Vivek,请看一下我在问题中的第二次编辑修改您的查询,为c_lan_索引添加相等检查,以便在
左后在r_src_cat.c_src_index=r_source.c_src_index
中添加和r_src_cat.c_lan_index=r_source.c_lan_索引
后接其中r_source.c_src_索引为空代码>。所以试试这个