1052: Kolumna " id " w liście pól jest niejednoznaczna
Mam 2 stoliki. tbl_names
i tbl_section
, które mają w sobie zarówno pole id
. Jak wybrać pole id
, bo zawsze dostaję ten błąd:
1052: Column 'id' in field list is ambiguous
Oto moje zapytanie:
SELECT id, name, section
FROM tbl_names, tbl_section
WHERE tbl_names.id = tbl_section.id
Mogę po prostu wybrać wszystkie pola i uniknąć błędu. Ale to byłaby strata wydajności. Co mam zrobić?
8 answers
SQL obsługuje kwalifikowanie kolumny przez prefiks odniesienia z pełną nazwą tabeli:
SELECT tbl_names.id, tbl_section.id, name, section
FROM tbl_names
JOIN tbl_section ON tbl_section.id = tbl_names.id
...lub alias tabeli:
SELECT n.id, s.id, n.name, s.section
FROM tbl_names n
JOIN tbl_section s ON s.id = n.id
Alias tabeli jest zalecanym podejściem -- po co wpisywać więcej niż trzeba?
Dlaczego Te Zapytania Wyglądają Inaczej?
Po Drugie, moje odpowiedzi używają składni ANSI-92 JOIN (Twoja to ANSI-89). Podczas wykonywania tego samego, składnia ANSI-89 nie obsługuje złączeń zewnętrznych (PRAWY, LEWY, pełny). Składnia ANSI-89 powinna być uznana za przestarzałą, jest wielu NA SO, którzy nie zagłosują na składnię ANSI-89, aby to wzmocnić. Aby uzyskać więcej informacji, zobacz to pytanie .
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
2020-06-20 09:12:55
W twoim SELECT
oświadczeniu musisz przedłożyć swój identyfikator tabelą, z której chcesz go wybrać.
SELECT tbl_names.id, name, section
FROM tbl_names
INNER JOIN tbl_section
ON tbl_names.id = tbl_section.id
Lub
SELECT tbl_section.id, name, section
FROM tbl_names
INNER JOIN tbl_section
ON tbl_names.id = tbl_section.id
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
2012-11-23 20:13:23
Można to zrobić podając w pełni kwalifikowaną nazwę, np.:
SELECT tbl_names.id as id, name, section FROM tbl_names, tbl_section WHERE tbl_names.id = tbl_section.id
Co da ci id tbl_names
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-07-10 01:12:07
Najprostszym rozwiązaniem jest połączenie z USING
zamiast ON
. W ten sposób baza danych "wie", że obie kolumny id
są rzeczywiście takie same i nie będzie się nad tym zastanawiać:
SELECT id, name, section
FROM tbl_names
JOIN tbl_section USING (id)
Jeśli id
jest jedyną wspólną nazwą kolumny w tbl_names
i tbl_section
, możesz nawet użyć NATURAL JOIN
:
SELECT id, name, section
FROM tbl_names
NATURAL JOIN tbl_section
Zobacz też: https://dev.mysql.com/doc/refman/5.7/en/join.html
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
2018-06-15 20:21:31
To, co prawdopodobnie naprawdę chcesz zrobić, to użyć operatora Unii w ten sposób:
(select ID from Logo where AccountID = 1 and Rendered = 'True')
union
(select ID from Design where AccountID = 1 and Rendered = 'True')
order by ID limit 0, 51
Oto dokumenty do tego https://dev.mysql.com/doc/refman/5.0/en/union.html
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
2015-05-28 20:34:28
Już jest wiele odpowiedzi na twoje pytanie, możesz to zrobić również w ten sposób. Możesz nadać swojej tabeli nazwę aliasu i użyć jej w zapytaniu select w następujący sposób:
SELECT a.id, b.id, name, section
FROM tbl_names as a
LEFT JOIN tbl_section as b ON a.id = b.id;
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
2016-05-25 06:28:54
Jeśli format id w obu tabelach jest różny, to chcesz do nich dołączyć, jako taki możesz użyć id z jednej głównej tabeli, powiedzmy, jeśli masz table_customes
i table_orders
, A id dla zamówień jest jak "101","102"..."110", wystarczy użyć jednego dla Klientów
select customers.id, name, amount, date from customers.orders;
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
2014-03-23 06:40:39
SELECT tbl_names.id, tbl_names.name, tbl_names.section
FROM tbl_names, tbl_section
WHERE tbl_names.id = tbl_section.id
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
2017-05-22 14:08:59