我需要在database1
中选择database1.table1.foreign_key
中database2.table2.some_id
不存在的所有记录。
这里的其他问题谈到通过他们的表的外键加入两个数据库,但这对我的情况不起作用,因为我正在寻找他们的外键不存在的记录。其他数据库的表格。
以下是一些示例数据:
在database1
。table1
:
id - name - foreign_key
-----------------------
1 - No need - 253
2 - Don't need - 627
3 - Need this - 166
在database2
。table2
:
id - name - some_id
-------------------
1 - Sample - 627
2 - Another - 253
因此,使用这些示例数据,运行查询后,我希望得到
3 - Need this - 166
。
这是我目前无法解决的解决方案。
SELECT fish_system_sandbox.receivables.*
FROM fish_system_sandbox.receivables
WHERE fish_system_sandbox.receivables.catch_datum_id NOT IN (SELECT inventory_sandbox2.holdings.catch_id FROM inventory_sandbox2.holdings)
返回空结果,不会产生错误。
答案 0 :(得分:1)
试试这个:
select table_1.* from table_1 left join table_2
on table_1.foreign_key=table_2.some_id
where table_2.id is null
或者:
select table_1.* from table_1
where foreign_key not in (select some_id from table_2)
这些查询会提供来自 table_1 的记录, table_2
some_id
不是unique
密钥,则第一个查询可能会多次返回一些记录。为防止这种情况发生,您可以使用select distinct
代替select
。答案 1 :(得分:0)
select * from database1.table where database1.table.FK not in (
select database2.table.FK from database2.table
)
这将返回数据库1中的所有行,但不会返回基于外键的database2.table中的所有行。
答案 2 :(得分:0)
你可以试试 -
SELECT t1.*
FROM db1.table1 t1
LEFT JOIN db2.table2 t2 ON t1.fk=t2.some_id
WHERE t2.id IS NULL;
注意:加入字段(t1.fk和t2.some_id)应编入索引以获得更好的性能。