Mam następującą instrukcję SQL
SELECT be.*, it.order_number
FROM songs AS be
INNER JOIN
(
SELECT song_id, order_number
FROM items
WHERE order_status = 1
) it
ON be.id = it.song_id
INNER JOIN orders AS or
ON it.order_number = or.order_number
WHERE be.active = 0
Mogę „nie rozumieć, dlaczego to stwierdzenie nie daje żadnych wyników. Kiedy usuwam następujący wiersz;
INNER JOIN orders AS or
ON it.order_number = or.order_number
Wydaje się, że przynosi rezultaty i wiem, że order_number
istnieje w orders
tabela - więc jest to oczywiście niepoprawna składnia, ale nie jestem pewien, skąd się stąd wybrać? Doceń pomoc.
Odpowiedzi:
1 dla odpowiedzi № 1Problem w tym konkretnym przypadku polega na tym, że or
w zapytaniu jest słowem zastrzeżonym. Możesz tego użyć, jeśli chcesz, ale będziesz musiał to cytować
SELECT be.*, it.order_number
FROM songs AS be
INNER JOIN
(
SELECT song_id, order_number
FROM items
WHERE order_status = 1
) it
ON be.id = it.song_id
INNER JOIN orders AS "or"
ON it.order_number = "or".order_number
WHERE be.active = 0
Generalnie jednak, dla czytelności, unikam takich nazw. Jeśli musisz je cytować lub uciec, prawdopodobnie jest to zła nazwa.