0

クエリが添付された次のテーブルのセットがあります。明らかに、私はANDこれにあまりにも多くの句を詰め込んでおり、結果は有効ですが、結果は有効ではありません。以下に示すのは、私が使用しているダイアグラムと SQL です。

MySQL データベース モデルの非表示フィールドは重要ではありません。

SELECT p.products_id, pd.language_id, pd.products_name,
       pd.products_description, pd.products_url, p.products_quantity,
       p.products_model, p.products_image, p.products_price, p.products_virtual,
       p.products_weight, p.products_date_added, p.products_last_modified,
       p.products_date_available, p.products_status, p.manufacturers_id,
       p.products_quantity_order_min, p.products_quantity_order_units, p.products_priced_by_attribute,
       p.product_is_free, p.product_is_call, p.products_quantity_mixed,
       p.product_is_always_free_shipping, p.products_qty_box_status, p.products_quantity_order_max, p.products_sort_order, 

FROM `magez_products` p, `magez_products_description` pd
       WHERE p.products_id = pd.products_id
       AND p.products_id = 186
       AND p.products_id = cfv.products_id 
       AND cfv.nation_id = cfvn.nation_id
       AND cfv.clan_id = cfvc.clan_id
       AND cfv.rarity_id = cfvr.rarity_id
4

4 に答える 4

1

これらの場合に私が通常行っていることは、より小さなクエリ(たとえば、1つのAND)から始めて、「結果がない」場所がわかるまで、クエリをどんどん増やしていきます。そうしないと、デバッグが非常に困難になります。

于 2012-11-13T21:14:34.253 に答える
1

これは完全な選択ではありません。選択にはcfv、cfvn、cfvc、およびcfvrテーブルがないため、mysqlは文句を言う必要があります。

and ...の最後から1つずつ削除して、結果が再び行を持ち始める場所を確認することで、問題を解決できます。where

1つの問題は、たとえば、結合テーブル(pd、cfvなど)が欠落しているproducts_idことです。

もちろん、要件に応じて、内部結合を左結合に置き換えることもできます。

于 2012-11-13T21:15:18.930 に答える
1

結合ステートメントが必要です

SELECT p.products_id, pd.language_id, pd.products_name,
   pd.products_description, pd.products_url, p.products_quantity,
   p.products_model, p.products_image, p.products_price, p.products_virtual,
   p.products_weight, p.products_date_added, p.products_last_modified,
   p.products_date_available, p.products_status, p.manufacturers_id,
   p.products_quantity_order_min, p.products_quantity_order_units,         
p.products_priced_by_attribute,
   p.product_is_free, p.product_is_call, p.products_quantity_mixed,
   p.product_is_always_free_shipping, p.products_qty_box_status,                                                                               p.products_quantity_order_max,
p.products_sort_order, 

FROM `magez_products` p
join `magez_products_description` pd
on p.products_id = pd.products_id
   AND p.products_id = 186
   AND p.products_id = cfv.products_id      <-------------- what is cfv  join   on that too !!!!!!!!!!
   AND cfv.nation_id = cfvn.nation_id
   AND cfv.clan_id = cfvc.clan_id
   AND cfv.rarity_id = cfvr.rarity_id
于 2012-11-13T21:18:23.167 に答える
1

助けるために、私も古い学校の ANSI 形式でした...テーブル間の JOINS を使用して記述された最新のクエリを見つけ、実際に「制限」したい場所にのみ「AND」を適用します。場合によっては、これはプライマリの "from" テーブルではなく、結合で直接発生する可能性があります。また、結合として実行すると、テーブル「A」がテーブル「B」にどのように接続されているかが正確にわかります。テーブルがリストされているのと同じ順序で A = B の比較を維持しようとしています...左側のテーブルの=の左側、=の右側に右側の表など

SELECT 
      p.products_id, 
      pd.language_id, 
      pd.products_name,
      pd.products_description, 
      pd.products_url, 
      p.products_quantity,
      p.products_model, 
      p.products_image, 
      p.products_price, 
      p.products_virtual,
      p.products_weight, 
      p.products_date_added, 
      p.products_last_modified,
      p.products_date_available, 
      p.products_status, 
      p.manufacturers_id,
      p.products_quantity_order_min, 
      p.products_quantity_order_units, 
      p.products_priced_by_attribute,
      p.product_is_free, 
      p.product_is_call, 
      p.products_quantity_mixed,
      p.product_is_always_free_shipping, 
      p.products_qty_box_status, 
      p.products_quantity_order_max, 
      p.products_sort_order
   FROM 
      magez_products p
         JOIN magez_products_description pd
            on p.products_id = pd.products_id
         JOIN magez_cfv_cards cfv
            on p.products_id = cfv.products_id
            JOIN magez_cfv_nations cfvn
               on cfv.nation_id = cfvn.nation_id
            JOIN magez_cfv_clans cfvc
               on cfv.clan_id = cfvc.clan_id
            JOIN magez_cfv_rarity cfvr
               on cfv.rarity_id = cfvr.rarity_id
   where
      p.products_id = 186

私が持っているフォーマットに注意してください、それはあなたのテーブル構造に相関しています... AはBに結合され、BはCに結合され、DおよびEはそれぞれの列で結合されます。WHERE 句は、必要な正確な基準で単純です...

他の特定の要素のみが必要な場合は、そのコンポーネントの JOIN 基準に「AND」を追加するだけです。

于 2012-11-13T21:18:48.297 に答える