Mam pięć stołów, ale dwa są najważniejsze. Element tabeli to tabela, w której możemy znaleźć wszystkie elementy. Oraz stół obchody_parovani, czyli stół, na którym znajdziemy przedmioty związane z jakimś sklepem.
Przedmiot tabeli
ID | nazev | cesta | druh | kvalita
1 | nazev | cesta | 1 | 1
2 | nazev | cesta | 3 | 2
3 | nazev | cesta | 1 | 1
4 | nazev | cesta | 5 | 3
Tabela obchody_parovani
ID | obchod | item
1 | 1 | 2
2 | 3 | 3
3 | 1 | 1
Muszę rozpoznać, czy przedmiot jest w sklepie, czy nie. Jeśli tak, to potrzebuję ID sklepu, a jeśli nie, to potrzebuję NULL.
Wynik jaki chcę dla obchodów z obchody_parovani to id 1
ID | nazev | cesta | druh_n | kvalita_n | obchod
1 | nazev | cesta | 1 | 1 | NULL
2 | nazev | cesta | 3 | 2 | 1
3 | nazev | cesta | 1 | 1 | NULL
4 | nazev | cesta | 5 | 3 | 1
Nazev, cesta, druh_n, kvalita_n nie jest ważne, potrzebuję obchodu kolumny. Jeśli tabela zawiera wiersz z obchodem = 1, to w wyniku będzie 1, a jeśli nie, to będzie NULL
Mój obecny SQL to:
SELECT i.id, i.nazev, i.cesta, d.druh AS druh_n, k.nazev AS kvalita_n, par.obchod FROM itemy AS i LEFT JOIN itemy_druhy AS d ON d.id = i.druh LEFT JOIN itemy_kvalita AS k ON k.id = i.kvalita LEFT JOIN itemy_rozdeleni AS r ON r.id = i.rozdeleni LEFT JOIN obchody_parovani AS par ON par.item = i.id WHERE par.obchod = 1
1 odpowiedź
Możesz spróbować użyć bazy OUTER JOIN
na stole Itemy
.
Schemat (MySQL v5.7)
CREATE TABLE Itemy(
ID INT,
nazev VARCHAR(50),
cesta VARCHAR(50), druh INT, kvalita INT
);
INSERT INTO Itemy VALUES (1,'nazev','cesta',1,1);
INSERT INTO Itemy VALUES (2,'nazev','cesta',3,2);
INSERT INTO Itemy VALUES (3,'nazev','cesta',1,1);
INSERT INTO Itemy VALUES (4,'nazev','cesta',5,3);
CREATE TABLE obchody_parovani(
ID INT,
obchod INT,
item INT
);
INSERT INTO obchody_parovani VALUES (1, 1,2);
INSERT INTO obchody_parovani VALUES (2, 3,3);
INSERT INTO obchody_parovani VALUES (3, 1,1);
Zapytanie nr 1
SELECT i.*,op.obchod
FROM Itemy i
LEFT JOIN obchody_parovani op on i.druh = op.obchod
and i.kvalita = op.item
order by i.id;
| ID | nazev | cesta | druh | kvalita | obchod |
| --- | ----- | ----- | ---- | ------- | ------ |
| 1 | nazev | cesta | 1 | 1 | 1 |
| 2 | nazev | cesta | 3 | 2 | |
| 3 | nazev | cesta | 1 | 1 | 1 |
| 4 | nazev | cesta | 5 | 3 | |
Z wypróbowanego zapytania myślę, że możesz spróbować przesunąć warunek par.obchod = 1
do klauzuli on
z where
w przeciwnym razie robisz inner join
z obchody_parovani
SELECT i.id, i.nazev, i.cesta, d.druh AS druh_n, k.nazev AS kvalita_n, par.obchod
FROM itemy AS i
LEFT JOIN itemy_druhy AS d ON d.id = i.druh
LEFT JOIN itemy_kvalita AS k ON k.id = i.kvalita
LEFT JOIN itemy_rozdeleni AS r ON r.id = i.rozdeleni
LEFT JOIN obchody_parovani AS par ON par.item = i.id and par.obchod = 1
Podobne pytania
Nowe pytania
mysql
MySQL to darmowy system zarządzania relacyjnymi bazami danych (RDBMS) o otwartym kodzie źródłowym, który wykorzystuje język SQL (Structured Query Language). NIE UŻYWAJ tego znacznika dla innych baz danych, takich jak SQL Server, SQLite itp. Są to różne bazy danych, które używają własnych dialektów SQL do zarządzania danymi.