2013-12-18 24 views
0

首先,我不得不使用MySQL,儘管它已被棄用。我非常清楚這一事實。希望你們仍然可以用我的sql語法來幫助我。在單個查詢中使用不同風格的MySQL多重選擇

我想從一些不同的表中訪問幾列。問題是,有些列需要與最後一列不同的where子句,而最後一列的where子句需要來自查詢其餘部分的信息,所以我不能將它分成多個查詢,我試過了。

我不能使用聯合,因爲一個select語句選擇四列,而另一個選擇一列。

查詢:

(SELECT DISTINCT inventory.Quantity, itemtypes.Itemtypename, 
itemtypes.ItemtypeID, inventory.ItemID 
FROM inventory JOIN itemtypes ON inventory.ItemtypeID = itemtypes.ItemtypeID 
JOIN sets ON inventory.SetID = sets.SetID 
WHERE inventory.ItemtypeID = itemtypes.ItemtypeID 
AND itemtypes.Itemtypename = 'Set' 
AND sets.SetID = '".$setid."') 
UNION 
(SELECT DISTINCT sets.Setname 
FROM sets JOIN inventory ON sets.SetID = inventory.ItemID 
WHERE sets.SetID = inventory.ItemID) 

這是我嘗試使用,但沒有成功。我似乎無法找到任何其他方式鏈接到不同的選擇語句,而不使用多個查詢(由於我的PHP文件的結構,是不可能做到正確)。只要這個問題得到解決,文件的其餘部分就可以工作。希望你們可以幫助我,請讓我知道這是否可以做到。讓我知道你是否需要看我的PHP代碼。 $ setid是從文件中獲取幷包含數據庫中存在的值。

+0

MySQL不被棄用!你到底在哪裏? API中的某些功能被更新的功能取代,就這些了。 – fancyPants

+1

問題:樣本數據和期望的輸出肯定有幫助。並且您不需要在where子句中重複您的連接條件。你究竟在談論哪些條款?您的查詢可以完美地寫入一個查詢中,甚至不需要聯合。很不清楚的問題... – fancyPants

+0

@fancypants我會盡力解釋兩個where子句的區別。它都圍繞sets.SetID ='「。$ setid。」'和sets.SetID = inventory.ItemID。 $ setid與inventory.ItemID不同。 $ setid基本上是一個包含多個集合的集合,集合與inventory.ItemID具有相同的ID。如果我在上面的Select子句中使用Setname,我將從$ setid集合中獲取setname,這是我不想要的。這就是爲什麼即時通訊試圖從集合中獲取所有集合名稱,其中SetID =在$ setid中選擇了ItemIDs。我同意它的困惑。 – user3069795

回答

0

也許,你可以嘗試這樣。它在SQL Server中正常工作。

SELECT TMP1.Quantity,TMP1.Itemtypename, TMP1.ItemtypeID, TMP1.ItemID, TMP2.Setname 
FROM(
SELECT DISTINCT 
inventory.Quantity, 
itemtypes.Itemtypename, 
itemtypes.ItemtypeID, 
inventory.ItemID 
FROM inventory 
JOIN itemtypes ON inventory.ItemtypeID = itemtypes.ItemtypeID 
JOIN sets ON inventory.SetID = sets.SetID 
WHERE inventory.ItemtypeID = itemtypes.ItemtypeID 
AND itemtypes.Itemtypename = 'Set' 
AND sets.SetID = '".$setid."' 
) AS TMP1, 
(
SELECT DISTINCT 
sets.Setname 
FROM sets 
JOIN inventory ON sets.SetID = inventory.ItemID 
WHERE sets.SetID = inventory.ItemID 
) AS TMP2 

希望這是你想要的。你的問題似乎很模糊。

+0

嗨@Aditya和感謝您的快速回答!這絕對是朝着正確方向邁出的一步。不過,我需要再問一件事。在第二個where子句中,它表示WHERE sets.SetID = inventory.ItemID,它從數據庫中獲取所有ItemID。我需要的是僅從第一個select子句中選擇ItemID。這是可能的事情嗎?或者我需要額外的查詢嗎? – user3069795

+0

爲什麼你需要單獨的查詢?只需在第一個選擇子句中添加您的ItemId,因爲它看起來在過濾方面沒有區別,或者說在哪裏條件。這樣做會更容易。 – Aditya

+0

如果您從兩個表格和所需的輸出中添加樣本數據集的屏幕截圖,會更容易。 – Aditya