私はready_for_clientとready_to_shipの2つのテーブルを持っています。両方のテーブルの構造はほぼ同じです。Mysqlクエリの2つのテーブルが条件付きで結合する
id (int)
client_id (int)
truck_id (int)
driver_id (int)
list (varchar 50)
is_done (tinyint 1)
ready_for_clientはrts_id (varchar 32)
を持っており、READY_TO_SHIPは私が欲しいものrfc_id (varchar 32)
を持っている三つの異なるクエリ、rts_idとrfc_idが同じで両方のテーブルを照会する最初のものです。私は最初のものを持っており、それは動作します。
SELECT rfc.id AS Ready_For_Client_id, rfc.rts_id, t.Truck_Number, u.Name AS User_Name, c.Name AS Client_Name FROM ready_for_client rfc
INNER JOIN trucks t ON rfc.truck_id = t.id
INNER JOIN users u ON rfc.driver_id = u.id
INNER JOIN clients c ON rfc.client_id = c.id
INNER JOIN ready_to_ship rts ON rfc.rts_id = rts.rfc_id
WHERE rfc.is_done = 0
これは、必要なように1つのレコードを生成します。 2番目と3番目のクエリは、rfc_idとrts_idを共有していない両方のテーブルの他のすべてのレコードをそれぞれ選択したいと思います。
私は同じクエリを持っていると思っていましたが、4番目のINNER JOINには等しくないと思いました。
SELECT rfc.id AS Ready_For_Client_id, rfc.rts_id, t.Truck_Number, u.Name AS User_Name, c.Name AS Client_Name FROM ready_for_client rfc
INNER JOIN trucks t ON rfc.truck_id = t.id
INNER JOIN users u ON rfc.driver_id = u.id
INNER JOIN clients c ON rfc.client_id = c.id
INNER JOIN ready_to_ship rts ON rfc.rts_id != rts.rfc_id
WHERE rfc.is_done = 0
しかし、これはレコードを2倍にし、共有rts_idとrfc_idを持つ1つのレコードも含めています。
私はこの2番目と3番目のクエリをどのように設定する必要があるか知っていますか?
- 編集 -
ready_for_client
+----+-----------+----------+-----------+---------------------------+----------------------------------+---------+
| id | client_id | truck_id | driver_id | list | rts_id | is_done |
+----+-----------+----------+-----------+---------------------------+----------------------------------+---------+
| 1 | 1 | 2 | 7 | 175 | 2bcd069351002c4d92ba151ae67212ad | 0 |
| 2 | 2 | 2 | 7 | 231 | 95e906dec3c83b1c9bfbe3f0d6920aaf | 0 |
| 3 | 2 | 1 | 7 | 88,89,90,91 | e82ac070985e21ced4fb203c515b1618 | 0 |
| 4 | 3 | 1 | 7 | 37,249,38,39,40,41,109,42 | d21b5ac4a4da0e57b85a464c3a6fd511 | 0 |
+----+-----------+----------+-----------+---------------------------+----------------------------------+---------+
READY_TO_SHIP
+----+-----------+----------+-----------+-------+----------------------------------+---------+
| id | client_id | truck_id | driver_id | list | rfc_id | is_done |
+----+-----------+----------+-----------+-------+----------------------------------+---------+
| 1 | 3 | 1 | 7 | 1 | 10e938e49a67117273683535cebbe8cc | 0 |
| 2 | 3 | 1 | 7 | 2,3,4 | d21b5ac4a4da0e57b85a464c3a6fd511 | 0 |
+----+-----------+----------+-----------+-------+----------------------------------+---------+
2番目のクエリ用の出力、ready_for_clientから他のすべてのレコードを選択しようとしている:
+---------------------+----------------------------------+--------------+------------+----------------------+
| Ready_For_Client_id | rts_id | Truck_Number | User_Name | Client_Name |
+---------------------+----------------------------------+--------------+------------+----------------------+
| 1 | 2bcd069351002c4d92ba151ae67212ad | 20 | driver | client name |
| 1 | 2bcd069351002c4d92ba151ae67212ad | 20 | driver | client name |
| 2 | 95e906dec3c83b1c9bfbe3f0d6920aaf | 20 | driver | client name |
| 2 | 95e906dec3c83b1c9bfbe3f0d6920aaf | 20 | driver | client name |
| 3 | e82ac070985e21ced4fb203c515b1618 | 10 | driver | client name |
| 3 | e82ac070985e21ced4fb203c515b1618 | 10 | driver | client name |
| 4 | d21b5ac4a4da0e57b85a464c3a6fd511 | 10 | driver | client name |
+---------------------+----------------------------------+--------------+------------+----------------------+
これは、Read_For_Client_id 1 2と3のためのものでなければなりません。id 4はなく、1,2と3の倍数はありません。
画像あなたは、私は*のように....あなたは見たことがないのテーブルの3つのクエリを生成し、常に(再利用可能なテキストまたはSQLインサートとして)「サンプルデータ」と「期待結果」*を提供するために、あなたを求めていることをできればこれにより、正確な回答が素早く得られます。 –
あなたは 'where rfc.rts_id!= rts.rfc_id'のような条件であなたの解決策を教えてくれるかもしれません。 – Jenish
申し訳ありませんが、それについては考えていません。いくつかのデータと2番目のクエリの結果を追加しました。 –