sql >> Databasteknik >  >> RDS >> Mysql

Hur hänger dessa tabeller ihop?

En beställning skulle alltid ha en kund, eller hur? Så det är inte en vänster utan inre koppling.

Det som länkar dem är customer_id. Så din SQL är helt enkelt:

select o.order_number, o.customer_ID, o.address, 
    c.first_name, c.last_name
from orders o
inner join customer c on o.customer_ID = c.customer_ID;

Entitetsförhållande:

Order CustomerCustomer_Id 0...N>---+ 1 Customer_Id... ...

Denna EF-relation är från MS SQL Servers exempeldatabas Northwind. I den exempeldatabasen, precis som din, finns det kunder och beställningar. Kund- och ordertabeller är relaterade via CustomerId-fälten i båda tabellerna (det är primärnyckeln i Customers och främmande nyckel i Order-tabellen). När du modellerar det som en Entity-relation har du ovanstående diagram. Kundenhet har en "Order"-navigeringsegenskap (via kund-ID) som pekar på en viss kunds beställningar. Och beställningsenheten har en navigeringsegenskap som pekar på sin kund (igen via CustomerId). Relationen är 1 till 0 eller många (1 - *), vilket betyder att en kund kan ha 0 eller fler beställningar.

När du gör anslutningen från kundens sida använder du en LEFT join "om du vill se alla kunder oavsett om de har beställningar eller inte" - 0 eller fler beställningar. Om du bara vill se de med order(s) så använder du en inre join.

När du gör anslutningen från beställningars sida måste en beställning ha en kund så det kan inte vara en LEFT-anslutning. Det är en INRE koppling.

Du kan kontrollera relationen från båda sidor med hjälp av det anslutande CustomerId-fältet.

Du skulle inte ha en separat tabell för "OrderId, CustomerId" eftersom det inte är många-till-många-relationen (det skulle vara ren redundans och skulle skapa normaliseringsavvikelser).

Hoppas det är tydligare nu.



  1. Hur man undviker variabelsubstitution i Oracle SQL Developer med "trinidad &tobago"

  2. PostgreSQL Meltdown Benchmarks

  3. Hur kör jag en MS SQL Server lagrad procedur i java/jsp och returnerar tabelldata?

  4. MySQL konverterar Degree, Minutes, Seconds till Degree decimal