0

これが私のテーブルです

ProductID ディスプレイ UPC
10 0 0553
14 0 0753
11 1 0753
17 1 0453

お気付きのように、行 2 と行 3 の UPC は同じです。display = 0 および upc を持つすべての行を選択して、display = 1 の行と同じにしたいと考えています。そのため、テーブルでは行 2 のみを選択したいと考えています。これまでのところ、動作しない私のコールドフュージョン コードは次のとおりです。ご意見をお聞かせください。

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

3 に答える 3

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;
于 2012-04-29T15:10:25.220 に答える
1

exists(select 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>
于 2012-04-30T06:19:36.250 に答える
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>
于 2012-04-29T17:32:50.507 に答える