2012-04-29 8 views
0

ここに私のテーブルがSQL/ColdFusionの選択行

ある
 
ProductID  Display  UPC 
10   0    0553 
14   0    0753 
11   1    0753 
17   1    0453 

あなたが気付いた場合、行2と3は同じUPCを持っています。私はディスプレイ= 0とupcを持つすべての行を選択して、ディスプレイ= 1の行と同じにしたいと思っています。だから私のテーブルでは、2行しか選択しません。これまでの私のcoldfusionコードは動作しません。ご意見をお聞かせください。

<cfquery name="GetData" datasource="#Application.ds#" dbtype="ODBC" username="#Application.UserName#" password="#Application.Password#"> 
Select ProductID, Display, UPC 
From Products 
Where Display = 0 
... 
</cfquery> 

答えて

1

正しいクエリをお探しですか?私は、その目標を達成するためには複数の方法があると言います。私にとって、この1つはあなたの例とMySQLの仕事をしていません:

SELECT 
    p1.ProductID, p1.Display, p1.UPC 
FROM 
    Products as p1, Products as p2 
WHERE 
    p1.UPC=p2.UPC and p1.Display=0 and p2.Display=1; 
0

前の答えは、使用して副選択オプション

<cfquery name="GetData" datasource="#Application.ds#" dbtype="ODBC" username="#Application.UserName#" password="#Application.Password#"> 
Select t1.ProductID, t1.Display, t1.UPC 
From Products t1 
Where t1.Display = 0 and 
     t1.UPC = (Select t2.UPC 
        From Products t2 
       Where t2.Display = 1)    
</cfquery> 
1

のために働くかに行く必要があります(... 1を選択)が存在するほうが効率的ですあなたがそれを使用しているすべてのものがフィルタの場合、サブ選択または結合よりも

<cfquery name="GetData" datasource="#Application.ds#" dbtype="ODBC" username="#Application.UserName#" password="#Application.Password#"> 
select ProductID, Display, UPC 
from Products p 
where Display = 0 
and exists (
    select 1 from Products p2 
    where p.UPC = p2.UPC 
    and p2.Display = 1 
) 
</cfquery>