Wykonywanie połączenia wewnętrznego dla wielu kolumn w tej samej tabeli
Mam scenariusz, w którym trochę utknąłem. Załóżmy, że mam ankietę na temat kolorów i mam jedną tabelę dla danych kolorów, a drugą dla odpowiedzi ludzi.
TbColors
color_code , color_name
1 , 'blue'
2 , 'green'
3 , 'yellow'
4 , 'red'
TbAnswers
answer_id , favorite_color , least_favorite_color , color_im_allergic_to
1 , 1 , 2 3
2 , 3 , 1 4
3 , 1 , 1 2
4 , 2 , 3 4
Do wyświetlania chcę napisać SELECT, który przedstawia tabelę odpowiedzi, ale używając kolumny color_name z tbColors.
Rozumiem "najbardziej głupi" sposób, aby to zrobić: nazywanie tbColors trzy razy w sekcji FROM, używając innego aliasu dla każda kolumna do zastąpienia.
Jak wyglądałby nie-głupi sposób? 45
1 answers
To chyba jest droga:
SELECT
A.answer_id
,C1.color_name AS favorite_color_name
,C2.color_name AS least_favorite_color_name
,C3.color_name AS color_im_allergic_to_name
FROM tbAnswers AS A
INNER JOIN tbColors AS C1
ON A.favorite_color = C1.color_code
INNER JOIN tbColors AS C2
ON A.least_favorite_color = C2.color_code
INNER JOIN tbColors AS C3
ON A.color_im_allergic_to = C3.color_code
Zamiast "głupi", zaryzykowałbym stwierdzenie, że jest to dość standardowe zapytanie. Zakłada to również, że wszystkie kolumny będą miały poprawną wartość. W przeciwnym razie Zamień wszystkie połączenia wewnętrzne na połączenia lewe
90
Author: BradBrening,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-05 12:34:48
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-05 12:34:48