11

entry.id で以下のテーブルを結合することから、最高の type_id を持つ food_brands テーブルから行を抽出したいので、type_id 11940 で下の上位 3 行を取得する必要があります。

食品ブランド

        id      brand       type_id 
        15375   cesar       11940
        15374   brunos      11940
        15373   butchers    11940
        15372   bakers      11939
        15371   asda        11939
        15370   aldi        11939

種類

        id      type      quantity      food_id 
        11940   comm      53453         10497
        11939   comm      999           10496

食べ物

        id      frequency   entry_id 
        10497   twice       12230
        10496   twice       12230
        10495   once        12230

エントリ

         id     number  
         12230  26  

クエリでの私の試みは、下位の type.id レコードを除外していません。したがって、food_brands の下のテーブル レコードから、type_id が 11940 と 11939 のレコードを取得しています。

SELECT fb.*
                        FROM food_brands fb
                        INNER JOIN types t ON fb.type_id = t.id
                        INNER JOIN
                        (
                            SELECT MAX(id) AS MaxID
                            FROM types
                            GROUP BY id
                        ) t2 ON t.food_id = t2.food_id AND t.id = t2.MaxID
                        INNER JOIN foods f ON t.food_id = f.id
                        INNER JOIN entries e ON f.entry_id = e.id
                        WHERE entries.id = 12230
4

3 に答える 3

10

単純なサブクエリで問題なく実行できます。

SELECT * FROM food_brands WHERE type_id=
  (SELECT MAX(t.id) tid FROM types t
   JOIN foods f ON f.id=t.food_id AND f.entry_id=12230)

でテストする SQLfiddle

于 2013-03-27T19:00:07.417 に答える
2

food_brandsタイプIDで行を返したいだけの場合はmax、次を使用できるはずです。

SELECT fb.*
FROM food_brands fb
INNER JOIN
(
  select max(id) id
  from types
) t
  on fb.type_id = t.id

デモで SQL Fiddle を参照してください

于 2013-03-27T18:23:13.483 に答える
0

t2の列のみを取得しているため、サブクエリの内部結合の後にこれらすべての内部結合を実行している理由はわかりませんがfb、クエリ全体を表示しておらず、それを修正したいだけだと思います.

問題は実際にはサブクエリにt2あります:そこで、何らかの理由で、関数のセマンティックをGROUP BY id変更してごとに最大値を生成することを選択し、その列の最大値を求めているため、互いにキャンセルします. 句を削除するだけでクエリが修正されます。MAXidMAXGROUP BYGROUP BY

なんらかの理由でその句を削除できない場合は、おそらく置き換えMAX(id)id追加ORDER BY id DESC LIMIT 1するとよいでしょう。

また、サブクエリはfood_id後続のINNER JOIN句で使用されるため、おそらく選択する必要があります。

于 2013-03-28T11:51:14.963 に答える