Mysql
 sql >> Database >  >> RDS >> Mysql

Come sono correlate queste tabelle?

Un ordine avrebbe sempre un cliente, no? Quindi non è un join sinistro ma interno.

Ciò che li collega è il customer_id. Quindi il tuo SQL è semplicemente:

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;

Relazione tra entità:

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

Questa relazione EF proviene dal database di esempio di MS SQL Server Northwind. In quel database di esempio, proprio come il tuo, ci sono Clienti e Ordini. Le tabelle Clienti e Ordini sono correlate tramite i campi CustomerId in entrambe le tabelle (è la chiave primaria in Clienti e la chiave esterna nella tabella Ordini). Quando lo modelli come una relazione di Entità, hai il diagramma sopra. L'entità cliente ha una proprietà di navigazione "Ordini" (tramite customerId) che punta agli ordini di un determinato cliente. E l'entità Order ha una proprietà di navigazione che punta al suo Cliente (sempre tramite CustomerId). La relazione è da 1 a 0 o molti (1 - *), il che significa che un Cliente potrebbe avere 0 o più Ordini.

Quando esegui l'unione dal lato del Cliente, utilizzi un'unione SINISTRA "se vuoi vedere tutti i Clienti indipendentemente dal fatto che abbiano o meno Ordini" - 0 o più Ordini. Se vuoi vedere solo quelli con ordini, allora usi un inner join.

Quando esegui l'unione dal lato Ordini, un Ordine deve avere un Cliente, quindi non può essere un'unione SINISTRA. È un'unione INTERNA.

Puoi controllare la relazione da entrambi i lati utilizzando il campo CustomerId di collegamento.

Non avresti una tabella separata per "OrderId, CustomerId" in quanto non è una relazione molti-a-molti (sarebbe pura ridondanza e creerebbe anomalie di normalizzazione).

Spero che ora sia più chiaro.