2

だから私は10個のレコードを持つテーブルを持っています。

SELECT * FROM Komponens WHERE fkod = "SO"

約5レコードのテーブルが表示されます。しかし、その5つのレコードなしで結果が必要です。

例えば:

fkod   kkod
SU     AA
SU     AC
SA     AB
CI     AC
CI     AA

fkodはスパイス (SU - 砂糖、SA - 塩、CI - シナモン)の名前で、 kkodはスパイスの混合物の名前です。砂糖がなくなったので、作ることができる混合物を見せたいと思います。なぜなら、砂糖は必要ないからです (この場合はSA-だけABです)。

使用するSELECT * FROM Komponens WHERE fkod != "SU"と、AB、AC、AA が得られます。

どうすればSQLで解決できますか?

4

4 に答える 4

4
SELECT * FROM Komponens WHERE (fkod <>"SO") or (fkod is null)

追加された説明が与えられた場合、acattの答えは正しいです。次に、fkod = SUでkkodを識別し、次に、そのセットの外側にあるkkodで行を識別します。

SQLを書くために私が考えることができる他の唯一の方法は次のとおりです。

SELECT k.* 
FROM Komponens k left outer join
(select kkod from Komponens WHERE fkod = "SU" group by kkod) l
on k.kkod   = l.kkod   
where l.kkod is null
于 2012-10-02T13:49:36.767 に答える
2

新しいロジックで動作するように修正します。これを試してください:

SELECT * 
FROM Komponens
WHERE kkod NOT IN (
    SELECT kkod
    FROM Komponens
    WHERE fkod = "SU"
)
于 2012-10-02T13:49:49.050 に答える
1

Access で使えるかどうかはわかりませんが、

SELECT * FROM Komponens WHERE fkod = "SU"
SELECT * FROM Komponens WHERE fkod != "SU"

砂糖入りのものと砂糖なしのものがありますので...

SELECT * FROM Komponens WHERE fkod != "SU" 
AND kkod NOT IN (SELECT * FROM Komponens WHERE fkod = "SU")

私はそれをテストしていませんが、正しい行に置く必要があります。

幸運を

于 2012-10-02T14:14:25.283 に答える
1

混合物ごとに 1 つのレコードを含むテーブルがありますか? それはあなたのデータベースに欠けているようです。それにもかかわらず、あなたはまだあなたの問題を解決することができます:

 SELECT * FROM Komponens K1 WHERE NOT EXISTS 
    (SELECT * FROM Komponens K2 WHERE K2.kkod = K1.kkod AND K2.fkod = 'SA')

また

 SELECT * FROM Komponens K1 WHERE kkod NOT IN 
     (SELECT kkod FROM Komponens WHERE fkod = 'SA')

これらは、砂糖なしで作ることができる混合物の混合物とすべてのスパイス成分を提供します. 混合物のリストのみが必要で、混合物ごとに複数の行が必要ない場合は、に変更SELECT *SELECT DISTINCT kkodます。

于 2012-10-02T14:14:31.297 に答える