1

ここに問題があります。これがどのように機能するのか理解できません。だからここに取引があります:

$q= mysql_query("SELECT * FROM fruits_list, fruits_have WHERE fruits_list.fruit != fruit_have.fruit AND fruit_list.color != fruit_have.color");

テーブル:

fruits_list
- fruit --- color   -
-   1    -     2    -
-   2    -     3    -
-   1    -     3    -
-   1    -     4    -
---------------------

fruits_have
- fruit --- color -
-   1   ---   2   -
-   1   ---   3   -
-------------------

したがって、このクエリは、「fruit」に「1」、「color」に「2」、「3」を含む「fruits_list」からすべてを削除します。

ただし、両方の列が等しいレーンのみを削除したいと思います。この例では、「fruits_list」から2つのレーンのみを削除する必要があり、結果は次のようになります。

fruits_dont_have
- fruit --- color -
-  2    -    3    -
-  1    -    4    -
-------------------

質問は、クエリで何を変更する必要があるかということです。私はあなたが理解できるように自分自身を十分に明確にしたことを望みます。

編集:

ライアンE-単に結果から削除します。

bonCodigo-どちらもintです。

4

2 に答える 2

1

理想的にはSQLMINUS集合演算子を使用しますが、MySQLはまだこれをサポートしていません。

代わりに、WHEREを使用した左結合を介してこれを実行し、一致を除外することができるはずです。

SELECT fl.*
FROM fruits_list fl
LEFT JOIN fruits_have fh 
   ON fl.fruit = fh.fruit AND fl.color = fh.color
WHERE fh.fruit IS NULL
于 2012-12-03T18:53:28.890 に答える
1

2つの列をセパレーターで連結してから、以下のように比較してみてください。

     SELECT * FROM fruits_list, fruits_have 
     WHERE CONCAT_WS('@',fruits_list.fruit, fruits_list.color) !=  
               CONCAT_WS('@',fruits_have.fruit, fruits_have.color)
于 2012-12-03T18:57:18.407 に答える