2013-11-29 25 views
0

我有一個連接,我想通過加入兩個不同項目id的項目ID上的項目表來收集兩個項目的名稱。例如:如何從一張表中將多個項目從一個連接中拉出?

SELECT first_item_name, second_item_name FROM items JOIN order_table ON ... 

和這裏是我堅持 - 我切實需要做的是二聯接在一個表上,首先要選擇第一項的名稱:

ON first_item_id = first_id 

,然後去返回並選擇另一個連接的第二個項目的名稱:

ON second_item_id = second_id 

我的問題是可以在單個連接內完成嗎?

謝謝。

+0

你可以給你的表結構嗎? –

回答

0

總之,第

牢記的一點是,

On value = value 

子句必須評估爲TRUE,每個元組由創建(想想一個元組作爲有效記錄,但是通過加入創造了一個紀錄)加入。因此,如果第一個元組的tableA.col1 = tableB.col1爲true,而第二個元組的tableA.col1 = tableB.col1爲同時爲。這是皺紋;在這兩種情況下,tableA.col1 = tableB.col1,但只針對每個元組,分別以您所問的方式同時擁有tuple1和tuple2。

而且不要擔心多次加入同一張桌子。這並不是錯誤的,並不會造成不良表現或出於任何其他原因而被避免。

+0

您可以創建一個mysql函數來執行此操作,例如GetItemName(ItemID)。我不同意它不會導致性能問題。如果你加入同一張大桌子,性能會下降。 – Davos

+0

「本質上不會造成糟糕的表現」任何加入,實際上任何聲明都有導致表現不佳的風險。加入表格本身並沒有固有的風險。多連接,無索引連接,連接2個大數據集等常常會導致性能不佳。不是具體的事實,它是一個多重連接到一個給定的表。 – Karl

+0

你的陳述在邏輯上是正確的,但是語義沒有幫助。 「經常會導致」與「不是天生的」相比是合乎邏輯的一點,但儘管我喜歡這種討論,但它並沒有幫助OP。另一方面,SQL是一門非常迂腐的語言,所以它可以幫助他們開始思考。 – Davos

相關問題