0

私は2つのテーブルを持っています。

table one: items
table two: items_options

今、テーブル 2 で 2 つの options_ids を検索する必要があります

SELECT i.id FROM items as i
INNER JOIN items_options as io ON i.item_id = i.id 
WHERE io.option_id = 60143 AND io.option_id = 60142  
ORDER BY i.xy ASC LIMIT 0,50

group by/havingなしでどうすればできますか?

4

3 に答える 3

1

ステートメントが必要ORまたは使用されているようです。IN

SELECT i.id 
    FROM items as i
INNER JOIN items_options as io
    ON i.item_id = i.id 
WHERE io.option_id IN (60143, 60142)
ORDER BY i.xy ASC 
LIMIT 0,50

また

SELECT i.id 
FROM items as i
INNER JOIN items_options as io 
    ON i.item_id = i.id 
WHERE io.option_id = 60143 OR io.option_id = 60142  
ORDER BY i.xy ASC 
LIMIT 0,50

option_id両方の値を持つを持つことはできません。

編集:両方の値が必要な場合は、UNION ALLクエリを使用できます:

SELECT x.id
FROM
(
  SELECT i.id, i.xy
  FROM items as i
  INNER JOIN items_options as io 
    ON i.item_id = i.id 
  WHERE io.option_id = 60143 
  UNION ALL
  SELECT i.id, i.xy
  FROM items as i
  INNER JOIN items_options as io 
    ON i.item_id = i.id 
  WHERE io.option_id = 60142  
) x
ORDER BY i.xy ASC 
LIMIT 0,50

items_optionsまたは、テーブルに2回参加してみることもできます。

SELECT i.id 
FROM items as i
INNER JOIN items_options as io1 
  ON i.item_id = io1.id 
INNER JOIN items_options as io2 
  ON i.item_id = io2.id 
WHERE io1.option_id = 60143 AND io2.option_id = 60142  
ORDER BY i.xy ASC 
LIMIT 0,50
于 2012-08-09T21:32:45.067 に答える
0

ORの代わりに必要なようですAND。両方の条件を満たすitems_optionsの行はありません。

WHERE io.option_id = 60143 OR io.option_id = 60142
                           ^^

または、

WHERE io.option_id IN (60143,60142)

GROUPBYを使用したくないとおっしゃっています。重複したitems.id値を返したくないように聞こえます。SELECTリストの前にDISTINCTキーワードを追加して、重複を排除できます。

SELECT DISTINCT i.id FROM items as i
于 2012-08-09T21:32:14.780 に答える
0

ORよりも hereを使用した方がうまくいくかもしれませんANDANDは、2 つの状態が同時に発生する可能性があることを示唆しています。option_id = 60143を持つ行とを持つ行を探しているのでoption_id = 60142、 を使用ORすると、それらのいずれかを持つ行が取得されます。

SELECT i.id FROM items as i
INNER JOIN items_options as io ON i.item_id = i.id 
WHERE io.option_id = 60143 OR io.option_id = 60142  
ORDER BY i.xy ASC LIMIT 0,50 
于 2012-08-09T21:33:59.700 に答える