0

私のデータベースにはこれらのテーブルがあります

products
-------------
id | title  | 
-------------
1    Cheese  
2    Milk
3    Water

など……

products_to_city

    -----------------------
    city_id | product_id   | 
    -----------------------
    1         1
    1         2
    2         3
    3         1
    3         1

このSQLクエリを使用して結果を取得しています

SELECT
 p.id,
 p.title
 FROM products p
 LEFT JOIN products_to_city ptc ON ptc.id = 1

問題は、上記のクエリが、city が 1 の場所だけではなく、テーブルからすべてのデータをフェッチすることです。

私は何を間違っていますか?

4

8 に答える 8

3

productsクエリに何を結合するかを指示しませんでしproducts_to_cityた。特に、 のすべてのレコードに対して のすべてのレコードをLEFT JOIN結果セットに含めるように強制する を使用します。私はあなたがこれを望んでいると思います:productsproducts_to_city

SELECT p.id, p.title
FROM products p
INNER JOIN products_to_city ptc
  ON p.id = ptc.product_id
WHERE
  ptc.city_id = 1
于 2012-05-30T14:32:03.723 に答える
2

これを使って:

SELECT
 p.id,
 p.title
 FROM products p
 INNER JOIN products_to_city ptc ON ptc.id = p.id
 where ptc.id = 1
于 2012-05-30T14:30:36.417 に答える
2

製品を都市に結合するのではなく、すべての製品と都市の一致を得ています。

SELECT
 p.id,
 p.title
 FROM products p
 LEFT JOIN products_to_city ptc ON ptc.product_id = p.id
 where ptc.city_id = 1
于 2012-05-30T14:31:03.810 に答える
0

外部結合を行っているため、一致しない場合でも、行が返されます。内部結合を検討してください。

于 2012-05-30T14:29:59.060 に答える
0

これを行うと

LEFT JOIN products_to_city ptc 

結合条件に一致しない場合でも、製品からすべての行を返すように MySQL (実際にはすべての SQL dbms) に指示しています。

結合条件に一致する行のみを返すには、次を使用します

INNER JOIN products_to_city ptc ON ptc.product_id = p.id AND (something else)

正しい列名を使用してテーブルを結合する必要があることに注意してください。

あなたが書いたようなもの--pct.id = 1--は、通常、WHERE句で表現できるものであるため、その「何か他の」句で何を望んでいるのかわかりません。問題は、products_to_city テーブルに「id」という名前の列がないことです。

于 2012-05-30T14:30:20.527 に答える
0

LEFT JOINと置き換えますJOIN

これLEFT JOINは、対応するキーを持たない行 (結合の左側) も右側のテーブルに取り込んだためです。

pkfkの一致JOINを満たす "left" と "right" のテーブルの列のみを取得します。

これがあなたの解決策になります

SELECT
p.id,
p.title
FROM products p
JOIN products_to_city ptc ON ptc.id = 1
于 2012-05-30T14:30:31.680 に答える
0

Basic Question : LEFT OUTER JOIN vs Left Join (http://stackoverflow.com/questions/2809594/basic-question-left-outer-join-vs-left-join) を参照してください。それらは同じです。左内部結合が必要です。

于 2012-05-30T14:30:52.817 に答える
0
LEFT JOIN products_to_city ptc ON p.id = ptc.id
于 2012-05-30T14:32:38.443 に答える