2011-10-10 89 views
0

我有一個名爲ProductClassification兩列的表 '產品ID,ClassificationID'查詢SQLite的

ProductID, ClassificationID 
10408, 1749 
10408, 1750 

一個產品ID可以有多個ClassificationID。如果我查詢多個不同的ClassificationID,我將如何提取單個產品。

例如:下面的不工作

SELECT Product.ID, Product.Name FROM 
Product, ProductClassification WHERE 
ProductClassification.ClassificationID = '1750' AND 
ProductClassification.ClassificationID = '1749' 
+0

謝謝你們所有幫助我的答案。 「Dano」謝謝你爲我分手,幫了我很多。 「德姆」我最終使用你的程序。 – Peter

回答

1
  • WHERE子句對記錄的基礎記錄檢查。
  • 在單個記錄中,ClassificationID不能是17501749
  • 將此更改爲1750 OR 1749允許eahc個人記錄過濾。
  • 然後你需要檢查任何一個Product.ID這兩個記錄通過。


SELECT 
    Product.ID, 
    Product.Name 
FROM 
    Product 
INNER JOIN 
    ProductClassification 
    ON Product.ID = ProductClassification.ProductID 
WHERE 
    ProductClassification.ClassificationID = '1750' OR 
    ProductClassification.ClassificationID = '1749' 
GROUP BY 
    Product.ID, 
    Product.Name 
HAVING 
    COUNT(DISTINCT ProductClassification.ClassificationID) = 2 
1

你想要一個ORIN條款(不知道是否SQLLite支持與否)。

正在寫入的查詢正在尋找相同字段中的兩個值,該記錄不可能是

嘗試:

SELECT Product.ID, Product.Name FROM 
Product, ProductClassification WHERE 
ProductClassification.ClassificationID = '1750' OR 
ProductClassification.ClassificationID = '1749' 

OR

SELECT Product.ID, Product.Name FROM 
Product, ProductClassification WHERE 
ProductClassification.ClassificationID IN ('1750','1749') 
1

類型此,你錯過了 「內部連接」 部分 例如:

SELECT Product.ID, Product.Name FROM Product inner join ProductClassification on Product.ClassificationID = ProductClassification.ClassificationID WHERE 
ProductClassification.ClassificationID = '1750' or 
ProductClassification.ClassificationID = '1749' 
1

你似乎是新的SQL 。穿過它是很危險的。我會建議加入這些SQL語句以瞭解發生了什麼。

SELECT * FROM Product, ProductClassification 

此時,您將從兩個表中選擇每個可能的行組合。現在你想開始過濾器。對於初學者,你需要獲得你的產品分類。你應該在這裏使用「OR」而不是AND。沒有ProductClassification.ClassificationID將是既1750年到1749年

SELECT * FROM Product, ProductClassification WHERE 
ProductClassification.ClassificationID = '1750' OR 
ProductClassification.ClassificationID = '1749' 

在這一點上,你已經過濾下來ProductClassification.ClassificationID,但你需要描述你只行有意在ProductClassification.ProductID和Product.ID是相同的。

SELECT * FROM Product, ProductClassification WHERE 
(ProductClassification.ClassificationID = '1750' OR 
ProductClassification.ClassificationID = '1749') AND 
ProductClassification.ProductID = Product.ID 

這會給你一個單獨的行,該過濾器上的每個可能的組合。在你的例子中,你應該有兩行 - 一個是ClassificationID爲1750,另一個是ClassificationID爲1749.因爲你只對Product.ID和Product感興趣。名稱,你應該只返回這兩個領域:

SELECT Product.ID, Product.Name FROM Product, ProductClassification WHERE 
(ProductClassification.ClassificationID = '1750' OR 
ProductClassification.ClassificationID = '1749') AND 
ProductClassification.ProductID = Product.ID 

想必你只需要唯一值,這樣你就可以使用「DISTINCT」操作符,將你的回油過濾器到獨特的價值觀:

SELECT DISTINCT Product.ID, Product.Name FROM Product, ProductClassification WHERE 
(ProductClassification.ClassificationID = '1750' OR 
ProductClassification.ClassificationID = '1749') AND 
ProductClassification.ProductID = Product.ID 

使用JOIN語句處理這個查詢有很多更好的方法,但這是一個好的開始。