Esto es un poco complicado, pero tengo 2 tablas. Digamos que la estructura es algo como esto:¿Cuál es la mejor manera de unirse a la misma mesa dos veces?
*Table1*
ID
PhoneNumber1
PhoneNumber2
*Table2*
PhoneNumber
SomeOtherField
Las tablas se pueden unir basado en Table1.PhoneNumber1 -> Table2.PhoneNumber o Table1.PhoneNumber2 -> Table2.PhoneNumber.
Ahora, quiero obtener un conjunto de resultados que contiene PhoneNumber1, SomeOtherField que corresponde a PhoneNumber1, PhoneNumber2 y SomeOtherField que corresponde a PhoneNumber2.
Pensé en 2 formas de hacerlo: uniéndome a la mesa dos veces o uniéndome una vez con una OR en la cláusula ON.
Método 1:
SELECT t1.PhoneNumber1, t1.PhoneNumber2,
t2.SomeOtherFieldForPhone1, t3.someOtherFieldForPhone2
FROM Table1 t1
INNER JOIN Table2 t2
ON t2.PhoneNumber = t1.PhoneNumber1
INNER JOIN Table2 t3
ON t3.PhoneNumber = t1.PhoneNumber2
Esto parece funcionar.
Método 2:
Tener alguna manera una consulta que se ve un poco como esto -
SELECT ...
FROM Table1
INNER JOIN Table2
ON Table1.PhoneNumber1 = Table2.PhoneNumber OR
Table1.PhoneNumber2 = Table2.PhoneNumber
no he conseguido que esto funcione todavía y no estoy seguro de si hay una forma de hacerlo
¿Cuál es la mejor manera de lograr esto? De ninguna manera parece simple o intuitiva ... ¿Hay una manera más directa de hacer esto? ¿Cómo se implementa generalmente este requisito?
yo sólo he utilizado esta solución para mi problema. Ayudó mucho. Sin embargo, antes de ver esto, apliqué teclas principales y teclas externas donde pude ver tablas que necesitaban unirse entre sí. ¿Por qué es esto una mala idea? –
@volumeone: creo que es posible que haya entendido mal la última parte de mi respuesta. Las claves primarias y externas ** son ** una buena idea. Evitarlos es una mala práctica, un mal diseño y simplemente malo. –
Perfecto ... pero ¿por qué los alias son obligatorios en esta situación? –