製品の仕様を含むテーブルがあります。http://sqlfiddle.com/#!2/15575/1にデータのサンプルを作成しました。ユーザーが仕様で製品を検索できる検索フォームを作成します。たとえば、ユーザーは、RAM=2およびVGA=512またはVGA=1のラップトップを検索します。クエリを作成しましたが、機能しません。助けてください。この例:結果:1525,1535、k5、k6
質問する
379 次
4 に答える
5
select product
from my_table
where (custom = 'Ram' and custom_value = '2')
or (custom = 'vga' and custom_value in ('1', '512'))
group by product
having count(distinct custom) = 2
例:
于 2012-04-19T15:40:07.987 に答える
1
私はあなたの要求を次のように解釈しています:-あなたの各基準の中で、あなたはOR
条項が必要です。-すべての基準がAND
一緒に編集されます。
したがって、上記のサンプルでは、次のようにします。
SELECT products.product FROM
(select distinct product from my_table) as products
where
exists (
select * from my_table where products.product = my_table.product
and custom='Ram' and custom_value='2')
and exists (
select * from my_table where products.product = my_table.product
and custom='vga' and custom_value in('512','1'))
ここで、製品の一意のリストから始めて、各基準をチェックして、その製品に値が存在するかどうかを確認します。
SQLフィドルはこちら: http ://sqlfiddle.com/#!2/15575/35
そうは言っても、テーブルを再設計する必要があります。
このクエリから、再設計の開始点が何であるかを確認できます。まず、ユニークな製品だけをリストしたテーブルを作成します。次に、基準ごとにテーブルを作成します。または、固有の製品のテーブルを展開して、それらのカスタム値('Ram'、'vga'など)のそれぞれを固有の製品のテーブルの列として使用します。
于 2012-04-19T15:48:14.363 に答える
0
あなたor
は私が思うところにあなたが欲しいですand
:
SELECT product, count(*) as prod_count FROM my_table
WHERE (custom='Ram' and custom_value='2')
or (custom='vga' and custom_value in('512','1'))
group by product
having prod_count = 2
于 2012-04-19T15:35:18.860 に答える
0
まず、別のDB構造を使用することをお勧めします。
CREATE TABLE COMPANY (ID INT, NAME VARCHAR(50), PRIMARY KEY(ID));
CREATE TABLE RAM (ID INT, NAME VARCHAR(50), PRIMARY KEY(ID));
CREATE TABLE CPU (ID INT, NAME VARCHAR(50), PRIMARY KEY(ID));
CREATE TABLE VGA (ID INT, NAME VARCHAR(50), PRIMARY KEY(ID));
次に、リレーショナルテーブルを使用して、製品のプロパティを指定します。
CREATE TABLE PRODUCT_PROPERTIES (
ID_PRODUCT INT REFERENCES PRODUCT(ID),
ID_COMPANY INT REFERENCES COMPANY (ID),
ID_RAM INT REFERENCES RAM (ID),
ID_CPU INT REFERENCES CPU (ID),
ID_VGA INT REFERENCES VGA (ID),
PRIMARY KEY(ID_PRODUCT)
);
次に、単純なJOINSと単純なSELECTを使用してPRODUCT_PROPERTIES
、結果を簡単にフィルタリングできます。
お役に立てれば..
于 2012-04-19T15:42:26.053 に答える