MySQL-如何为两个表合并两个表的where子句?

时间:2018-10-29 09:16:54

标签: mysql sql

我有2张桌子:

sellers
id|name

locations
id|seller_id|name

现在,我想获得卖家并加入位置,并在where子句中合并两个表中的属性。

初始查询为:

SELECT 
    sellers.id
FROM sellers
JOIN locations.seller_id = sellers.id

我必须再增加一个部分,因为我不想重复数据:

SELECT 
    sellers.id
FROM sellers
JOIN locations on locations.seller_id = sellers.id
WHERE (
    SELECT id from locations
    WHERE locations.seller_id = sellers.id
    LIMIT 1
)

现在我可以执行以下操作

SELECT 
    sellers.id
FROM sellers
JOIN locations on locations.seller_id = sellers.id
WHERE (
    SELECT id from locations
    WHERE locations.seller_id = sellers.id
    LIMIT 1
)
AND (
    sellers.name = 'test'
    OR
    locations.name = 'test'
)
  • 这里的问题是MySql将加入第一个位置,并且如果该位置的名称不是“ test”,并且该卖方有一个名称为“ test”的位置,则该结果将不会出现。

有什么想法吗?

已更新:

带有数据的示例:

sellers
id|name
1|test
2|test2


locations
id|seller_id|name
1|1|test3
2|2|test4
3|2|test
4|2|test


result should be 
[1, 2] but with my query it is [1] 

2 个答案:

答案 0 :(得分:1)

如果您简化SQL,答案就会变得简单。

SELECT DISTINCT
    sellers.*
FROM sellers
    INNER JOIN locations on locations.seller_id = sellers.id
WHERE
    sellers.name = 'test'
    OR
    locations.name = 'test'

答案 1 :(得分:1)

您可以将Group ByHaving一起使用:

SELECT sellers.id, 
       sellers.name, 
       SUM(locations.name = 'test') AS has_test_location 
FROM sellers
    INNER JOIN locations on locations.seller_id = sellers.id
GROUP BY sellers.id, sellers.name 
HAVING sellers.name = 'test' OR 
       has_test_location