2012-09-24 48 views
1

我有以下SQL語句有內MySQL的SQL語句JOIN

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 

我似乎無法理解爲什麼這種說法不會產生任何結果。當我刪除以下行;

INNER JOIN orders AS or 
ON it.order_number = or.order_number 

它似乎產生的結果,我知道order_numberorders表確實存在 - 所以它顯然是不正確的語法,但我不知道從哪裏走?感謝幫助。

+3

您是否考慮過「或」可能是保留字的可能性? –

+0

直到你剛剛說出來,謝謝伊恩,愚蠢的錯誤。 – Wasim

回答

1

在這個特定情況下的問題是查詢中的or是保留字。您可以使用,如果你願意,但你必須引用它,像這樣

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 

但是總的來說,爲便於閱讀,我會避免這樣的名字。如果你必須引用它或者逃避它,那可能是一個壞名字。