LARAVEL从多个表中获取重复行

oug3syen  于 2023-01-31  发布在  其他
关注(0)|答案(1)|浏览(173)

我有一些问题与获取数据在laravel
我有表companiesaddresses,希望获取具有相同地址的所有公司
一个例子
公司表
| 身份证|姓名|创建时间|
| - ------|- ------|- ------|
| 1个|公司1|2023年1月30日|
| 第二章|二连|2023年1月30日|
| 三个|三连|2023年1月30日|
| 四个|四连|2023年1月30日|
地址表
| 身份证|公司标识|a1|a2|城市|状态|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 1个|1个|aa1|aa1|cc1|一号卫星|
| 第二章|第二章|aa2|aa2|二氧化碳|二号卫星|
| 三个|三个|aa3|aa3|三氯化碳|三号信令|
| 四个|四个|aa1|aa1|cc1|一号卫星|
我需要与ID 1,4的公司,因为他们有相同的地址
| 身份证|姓名|
| - ------|- ------|
| 1个|公司1|
| 四个|四连|

mf98qq94

mf98qq941#

我马上想到的是使用SQL连接来实现这一点,即使用SELF JOIN来比较表与其自身,同时还使用子查询来确保地址信息在您正在比较的表上可用。请尝试以下查询,应该会有帮助:

SELECT t2.c2_id as id, t2.c2_name as name
FROM (
SELECT c.id as c1_id, c.name as c1_name, CONCAT(addresses.a1, ' ', addresses.a2, ' ', addresses.city, ' ', addresses.state) as c1_address
FROM companies c
JOIN addresses 
ON c.id = addresses.company_id
) t1, 
(
SELECT c.id as c2_id, c.name as c2_name, CONCAT(addresses.a1, ' ', addresses.a2, ' ', addresses.city, ' ', addresses.state) as c2_address
FROM companies c
JOIN addresses 
ON c.id = addresses.company_id
) as t2
WHERE c1_id <> c2_id
AND c1_address = c2_address;

https://sqlize.online/s/dp

相关问题