1

この質問が以前にも尋ねられたかどうかはわかりません。もしそうなら、リンクに私を向けてください。

、、およびの3つの列nameを持つテーブルがあります。A、B、C、Dの4つの値のみにすることができますtypedateType

タイプA、B、またはCのすべてのレコードをフェッチしたいのですが、条件は、同じ名前のタイプがDの場合にのみフェッチする必要があるということです。

たとえば、このテーブルを考えてみましょう

Name      type    Date 
abc        A       5/7
abc        B       6/7
abc        D       7/7

xyz        A       5/7
xyz        D       6/7

lmn        A       5/7
lmn        B       6/7
lmn        C       7/7

したがって、ここでの取引には、次の結果セットが必要です

ABC 5/7
ABC 6/7
XYZ 5/7

ABCとXYZにはtypeDがあるため、ABCとXYZの他のレコードが表示されます。lmnにはtypeDがないため、結果セットには含まれません。

4

3 に答える 3

3

レコードが存在するかどうかをテストするには、次を使用できますwhere exists

select * from mytable t1 where exists (
     select * from mytable t2 where t1.Name=t2.Name and t2.type="D"
);

それはおそらく自明ですが、ここに参照があります:http: //dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html

Dレコードを除外する場合は、次のようにします。

select * from mytable t1 where t1.type<>"D" and exists (
     select * from mytable t2 where t1.Name=t2.Name and t2.type="D"
);
于 2012-06-07T16:30:14.423 に答える
1

これを試して:

SELECT Name, Date
FROM MyTable as mt
WHERE type != 'D'
AND EXISTS
(
   SELECT * FROM MyTable as mt2
   WHERE mt2.type = 'D' and mt2.name = mt.name
)

Dタイプが等しくなく、タイプが等しいレコードと一致する名前を持つすべてのレコードを選択していますD

于 2012-06-07T16:31:54.127 に答える
0
create view all_D as select name from your_table where type=D
select * from your_table where type<>D and name in (select * from all_D) 

そのビューを表示する代わりに、「not in」の後に、そのクエリを角かっこで囲むようにすることもできます。

于 2012-06-07T16:31:08.763 に答える