MySql - как объединить, где предложения для обеих таблиц для одного ко многим объединяются? - PullRequest
0 голосов
/ 29 октября 2018

У меня есть 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 голосов
/ 29 октября 2018

Вы можете использовать Group By с Having:

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 
0 голосов
/ 29 октября 2018

Если вы сделаете ваш SQL проще, ответ станет проще.

SELECT DISTINCT
    sellers.*
FROM sellers
    INNER JOIN locations on locations.seller_id = sellers.id
WHERE
    sellers.name = 'test'
    OR
    locations.name = 'test'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...