/ / MySQL Wybór połączonych wierszy - sql, mysql

MySQL Wybór połączonych wierszy - sql, mysql

Mam dwie tabele:

Tabela "A":

+----------+
| item_id  |
+----------+
| 10       |
| 20       |
| 30       |
| 40       |
+----------+

i tabela "B":

+----------+-------------+
| item_id  |   user_id   |
+----------+-------------+
| 10       | 1           |
| 10       | 2           |
| 20       | 1           |
| 30       | 2           |
+----------+-------------+

pole "item_id" jest wspólnym polem.

Jeśli chcę wybrać wszystkie wiersze z tabeli A gdziezarówno użytkownicy 1 i 2 istnieją (ale nie wiersze, w których istnieje tylko jeden z nich), w jaki sposób mogę uzyskać informacje o tworzeniu tego zapytania? (Szukam jednego wiersza w wyniku, gdzie item_id ma 10).

Odpowiedzi:

4 dla odpowiedzi № 1

Spróbuj tego:

  SELECT a.item_id
FROM TABLE_A a
JOIN TABLE_B b ON b.item_id = a.item_id
WHERE b.user_id IN (1, 2)
GROUP BY a.item_id
HAVING COUNT(*) = 2

2 dla odpowiedzi nr 2

Kolejna alternatywa:

SELECT A.*
FROM tableA A
INNER JOIN tableB B1 ON B1.item_id = A.item_id AND B1.user_id = 1
INNER JOIN tableB B2 ON B2.item_id = A.item_id AND B2.user_id = 2

Łączy od A do B dwukrotnie, raz dla jednego użytkownika, ponownie dla drugiego użytkownika. Jest to inny sposób na stwierdzenie samołączenia się od B do samego siebie, aby znaleźć przedmioty z obiema użytkownikami.

Nie rozszerzyłoby się to znacznie poza dwóch użytkowników (każdy z nich wymaga dodatkowego sprzężenia).


0 dla odpowiedzi № 3
select item_id from table_b where user_id = 1
intersect
select item_id from table_b where user_id = 2

0 dla odpowiedzi nr 4
SELECT a.item_id FROM a
INNER JOIN b x ON a.item_id = x.item_id
INNER JOIN b y ON x.item_id = y.item_id
AND x.user_id = 1 AND y.user_id = 2;