2012-09-25 62 views
0

我通常不會發布求助信息,但我真的被困在這裏,因爲我的SQL知識並不好。從兩個表格中生成一個表格中所有列的唯一值列表

這是我想要做的。 我有兩個表:

CREATE TABLE DistinctCategories (
name VARCHAR(20) PRIMARY KEY, 
check INT); 

CREATE TABLE Categories (
_id INTEGER PRIMARY KEY, 
tid INTEGER NOT NULL, 
name VARCHAR(20) NOT NULL, 
check INTEGER NOT NULL 
); 

我要創造一切可能的類別名稱的列表,針對特定的TID。如果兩個表中都有一個名稱,我只希望它列出一次,並且該行將採用類別中的「檢查」值。

我的線沿線的思考的東西:


Select *, 
From Categories, 
Where tid=2 

然後在此添加加入,但我不知道怎麼會工作。

這甚至可能嗎?

+0

哪裏是'tid'第一桌?定義'可能的名字'。 – 2012-09-25 13:47:39

回答

0

您可以使用左外連接這樣

Select C.id, C.tid, C.name, C.check 
    from Categories as C LEFT JOIN DistinctCategories as DC 
    ON C.name=DC.name 
where C.tid=2 

我沒有得到選中您想顯示的和做c.check和dc.check有外鍵關係?

+0

沒有外鍵關係。它只是一個0或1.想顯示c.check。謝謝,我會閱讀外部連接,並嘗試一下。 –

+0

所以上面的查詢應該爲你工作,讓我知道進展 – scc

+0

解決方案沒有工作。這可能是因爲在初始化時類別是空的。這使我得出以下結論:

 Select * From Categories as C Where tid=2 AND check=1 LEFT JOIN DistinctCategories as DC ON C.name=DC.name 
我認爲這應該工作,因爲檢查總是在DC中爲0。因此,它應該只添加DC中尚不在C中的名稱? 問題是,我顯然在「LEFT」附近出現語法錯誤。不確定爲什麼只是。 –

0

退房的UNION ALLNOT IN運營商:

SELECT name, check 
    FROM Categories 
WHERE tid = ? 
UNION ALL 
SELECT name, check 
    FROM DistinctCategories 
WHERE name NOT IN (SELECT name FROM Categories WHERE tid = ?) 
0

我懷疑任何人都會遇到同樣的問題,但我的解決辦法結束了以下內容:在

Select * 
From Categories 
Where tid=1 
UNION 
Select * 
From Categories 
Where Check=0 AND 
NOT IN (Select Name 
FROM Categories 
Where tid=1) 
Order By Name 
相關問題