2012-04-12 16 views
1

私が作成したSQLデータベースをテストしようとしています。そうするために、私は2つのテーブル:アイテムとブランドを持っています。アイテムにはブランド名を含むさまざまなフィールドが格納され、ブランドには名前を含む他のフィールドが格納されます。商品の各ブランドについて、ブランド表に対応する名前があることを確認したいと思います。どうすればいい?私はの線に沿って何かを考えた:SQL - each(if ... then ... else ...)

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

しかし、私はそれで文の...任意のアイデアを含める方法がわかりませんか?

+0

ブランドテーブルの記入が完了したら、商品とブランドの関係を確立して、もう一度心配する必要はありません。 –

答えて

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

items.brand = brands.nameを作成します。また、Itemsテーブルにブランド名ではなくbrandIDを格納する方が高速になります.sqlはstringよりも数字を探す方が良いです:items.brandID = brands.ID。 –

+0

ありがとう、それは私が探していたものです:)残念なことに、私はときどき何らかの理由でブランドIDを変更することがあります。したがって、アイテムにアイテムを格納することはできません。そうしないと、常に変更する必要があります。 – Dracoflamme

+0

@ user1329780:問題を解決した場合は[asnwerを受け入れる](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)を覚えておいてください。 StackOverflowへようこそ!! – Marco

0

あなたが本当に知りたいことは、ブランドテーブルに存在しないブランドを持つアイテムのすべてです。

は、彼らは以下のとおりです。

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

私はあなたがすることを示唆している:ELSE

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.'; 

が @number 印刷する場合は、BEGIN; '数が少ないです。' ELSE PRINT '番号は中です。'; END; GO