mysql-如何为一对多连接合并两个表的where子句?

jutyujz0  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(260)

我有两张table:

sellers
id|name

locations
id|seller_id|name

现在我想在where子句中获取sellers和join locations,并合并两个表中的属性。
初始查询是:

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]
jdgnovmf

jdgnovmf1#

你可以用 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
ffdz8vbo

ffdz8vbo2#

如果您使sql变得更简单,那么答案就会变得更简单。

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

相关问题