2012-04-12 18 views
1

我試圖測試一個我創建的SQL數據庫。爲此,我有兩張桌子:項目和品牌。項目存儲不同的字段,包括品牌名稱,品牌存儲包括名稱在內的其他字段。我想檢查一下品牌中的每個品牌在品牌表中都有相應的名稱。我會怎麼做?我想到的線沿線的東西:SQL - 對於每個(如果...然後...其他...)

"for each row in items" 
if (count(select * from items join brands on items.brand = brands.name) == 0, select items.name, ''); 

但是當時我不知道如何包含在其聲明中...任何想法?

+0

填完品牌表後,您可能會建立物品與品牌之間的關係,因此您不必再擔心這一點。 – 2012-04-12 17:44:42

回答

4

你可以試試這個:

SELECT items.name 
FROM items LEFT JOIN brands 
    ON items.brand = brands.name 
WHERE brands.name IS NULL 
ORDER BY items.name 

有了這個查詢,你從項目表中獲取的所有記錄,與corresponing品牌記錄加入他們(如果存在的話),最後採取相應的記錄品牌不具有的。

+0

Make that items.brand = brands.name。如果您在Items表中存儲brandID而不是品牌名稱,那麼速度會更快:sql在查找數字時比字符串好:items.brandID = brands.ID。 – 2012-04-12 17:49:21

+0

謝謝,這就是我一直在尋找的:)不幸的是,我有時會因爲某些原因更改品牌ID,因此我無法將它們存儲到項目中,否則我必須隨時更改它們。 – Dracoflamme 2012-04-12 18:53:57

+0

@ user1329780:記住你應該[接受一個asnwer](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)如果它解決了你的問題。歡迎來到StackOverflow! – Marco 2012-04-12 20:27:19

0

所以你真正想知道的是品牌表中不存在品牌的所有物品。

它們是:

SELECT DISTINCT brand 
FROM items i 
WHERE NOT EXISTS (
    SELECT NULL 
    FROM brands b 
    WHERE i.brand = b.brand 
) 

我建議你:

ALTER TABLE item WITH CHECK ADD CONSTRAINT item_FK_brand FOREIGN KEY (brand) REFERENCES brand (brand) 
1
DECLARE @Number int; 
SET @Number = 50; 
IF @Number > 100 
    PRINT 'The number is large.'; 

ELSE BEGIN IF @number PRINT; '數量很少。' ELSE PRINT'數字中等。'; END; GO