Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Połączenie MySQL Inner z warunkiem OR?

Możesz dołączyć na location_distance tabela dwukrotnie przy użyciu LEFT JOIN a następnie użyj COALESCE() funkcja zwracająca poprawną wartość dla distance :

select ot.id,
  ot.fromlocid,
  ot.tolocid,
  ot.otherdata,
  coalesce(ld1.distance, ld2.distance) distance
from other_table ot
left join location_distance ld1
  on ld1.fromLocid = ot.toLocid
  and ld1.toLocid = ot.fromLocid 
left join location_distance ld2
  on ld2.toLocid = ot.toLocid
  and ld2.fromLocid = ot.fromLocid 

Zobacz SQL Fiddle z wersją demonstracyjną

Zwraca wynik:

| ID | FROMLOCID | TOLOCID | OTHERDATA | DISTANCE |
---------------------------------------------------
| 12 |         5 |       3 |      xxxx |       70 |
| 22 |         2 |       4 |      xxxx |       63 |
| 56 |         8 |       6 |      xxxx |       15 |
| 78 |         3 |       5 |      xxxx |       70 |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Doktryna - podzapytanie w od

  2. Stół jest oznaczony jako uszkodzony i należy go naprawić

  3. Co oznacza i robi MYSQLI_NUM?

  4. DAYNAME() Przykłady – MySQL

  5. Zapytanie MySQL nie jest wstawiane, gdy zmienna PHP zawiera pojedyncze cudzysłowy