Ich habe zwei Tabellen, ready_for_client und ready_to_ship. Die Strukturen für beide Tabellen sind fast gleich.Mysql Abfrage zwei Tabellen beitreten Bedingung
id (int)
client_id (int)
truck_id (int)
driver_id (int)
list (varchar 50)
is_done (tinyint 1)
ready_for_client hat rts_id (varchar 32)
und ready_to_ship hat rfc_id (varchar 32)
Was ich will, ist drei verschiedene Abfragen, die ersten beiden Tabellen abfragen, wo die rts_id und rfc_id gleich ist. Ich habe die erste und es funktioniert.
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
Dies produziert einen Datensatz genau so, wie es sollte. Die zweite und dritte Abfrage möchte ich alle anderen Datensätze für beide Tabellen jeweils auswählen, die die RFC_ID und RTS_ID nicht teilen.
Ich dachte über die gleiche Abfrage, aber auf der vierten INNER JOIN haben es nicht gleich.
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
Aber das ist die die Aufzeichnungen zu verdoppeln und auch die, die einen Datensatz enthält, die die gemeinsame rts_id und rfc_id hat.
Weiß jemand, wie ich diese zweite und dritte Abfrage einstellen würde, um zu tun, was ich brauche?
- Bearbeiten -
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 |
+----+-----------+----------+-----------+-------+----------------------------------+---------+
Ausgang für die zweite Abfrage, versuchen, alle anderen Datensätze aus ready_for_client wählen:
+---------------------+----------------------------------+--------------+------------+----------------------+
| 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 |
+---------------------+----------------------------------+--------------+------------+----------------------+
Es sollte nur für Read_For_Client_id 1 2 und 3 sein. Keine ID 4 und keine Verdoppelung von 1 2 und 3.
Bild, wenn Sie können, dass ich Sie gebeten, für Tabellen 3 Abfragen erzeugen Sie noch nie gesehen .... immer bietet „Beispieldaten“ und „erwartetes Ergebnis“ * (als wieder verwendbare Text oder SQL-Einsätze) * als So erhalten Sie schnell und präzise Antworten. –
können Sie verwenden, wo Bedingung wie 'where rfc.rts_id! = Rts.rfc_id' sein kann, die Ihnen Ihre Lösung – Jenish
Sorry geben, nicht einmal daran denken. Ich habe einige Daten und das Ergebnis der zweiten Abfrage hinzugefügt. –