sql >> Databasteknik >  >> RDS >> Mysql

Hur hittar jag relationer mellan tabeller som är långdistansrelaterade? MySQL

Tabell representera affärsrelationer/föreningar. De "relationer[skepp]" du nämner är FK:er (främmande nycklar), och som inte behövs för att fråga. De anger att underradsvärden för vissa kolumner också måste vara underradsvärden för vissa nyckelkolumner. Det som behövs är att veta vad en rad säger om den aktuella affärssituationen när den ligger i en tabell. (Som, givet vilka situationer som uppstår, bestämmer FK:erna och andra begränsningar.)

Från Krävs för att gå med 2 bord med sina FKs i en 3:e tabell :

Så givet

-- rows where product [id_product] is supplied by [id_supplier] ...
ps_product(id_product, id_supplier, ...)
-- rows where carrier [id_carrier] has reference [id_reference] ...
ps_carrier(id_carrier, id_reference, ....)

vi skriver

    ps_product s
JOIN ...
ON s.id_product = ...
...
JOIN ps_carrier c
ON ... = id_carrier
WHERE ...

för att få rader var

    product [p.id_product] is supplied by [p.id_supplier] ...
AND ...
AND s.id_product = ...
...
AND carrier [c.id_carrier] has reference [c.id_reference] ...
AND ... = id_carrier
AND ...

Du behöver känna till dina tabellers predikat och sedan SLÄMMA tabeller ON eller WHERE så att det resulterande predikatet är för de rader du vill ha tillbaka.

Finns det någon tumregel för att konstruera SQL-fråga från en läsbar beskrivning?




  1. Hur använder man REGEXP med escape-sekvenser som ordgräns?

  2. SQL Server CASE-uttryck

  3. Vad är skillnaden mellan mysql drop-partition och truncate-partition

  4. Konvertera från Oracles RAW(16) till .NET:s GUID