MySQL中有两个不同的数据库

时间:2015-06-29 05:59:56

标签: mysql

我需要在database1中选择database1.table1.foreign_keydatabase2.table2.some_id不存在的所有记录。

这里的其他问题谈到通过他们的表的外键加入两个数据库,但这对我的情况不起作用,因为我正在寻找他们的外键不存在的记录。其他数据库的表格。

以下是一些示例数据:

database1table1

id - name - foreign_key
-----------------------

1 - No need - 253

2 - Don't need - 627

3 - Need this - 166

database2table2

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)

返回空结果,不会产生错误。

3 个答案:

答案 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

  • 第一个查询在 MySQL
  • 中运行得更快
  • 如果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)应编入索引以获得更好的性能。