Ik heb 2 tabellen. tbl_names
en tbl_section
die beide het veld id
bevatten. Hoe selecteer ik het veld id
, want ik krijg altijd deze foutmelding:
1052: Column 'id' in field list is ambiguous
Dit is mijn vraag:
SELECT id, name, section
FROM tbl_names, tbl_section
WHERE tbl_names.id = tbl_section.id
Ik zou gewoon alle velden kunnen selecteren en de fout vermijden. Maar dat zou zonde van de prestaties zijn. Wat moet ik doen?
Antwoord 1, autoriteit 100%
SQL ondersteunt het kwalificeren van een kolom door de verwijzing vooraf te laten gaan aan de volledige tabelnaam:
SELECT tbl_names.id, tbl_section.id, name, section
FROM tbl_names
JOIN tbl_section ON tbl_section.id = tbl_names.id
…of een tabelalias:
SELECT n.id, s.id, n.name, s.section
FROM tbl_names n
JOIN tbl_section s ON s.id = n.id
De tabelalias is de aanbevolen benadering — waarom zou u meer typen dan nodig is?
Waarom zien deze zoekopdrachten er anders uit?
Ten tweede gebruiken mijn antwoorden de ANSI-92 JOIN-syntaxis (de jouwe is ANSI-89). Hoewel ze hetzelfde uitvoeren, ondersteunt de ANSI-89-syntaxis geen OUTER-joins (RIGHT, LEFT, FULL). ANSI-89-syntaxis moet als verouderd worden beschouwd, er zijn velen op SO die niet voor ANSI-89-syntaxis zullen stemmen om dat te versterken. Voor meer informatie, zie deze vraag.
Antwoord 2, autoriteit 11%
In uw SELECT
-statement moet u uw id laten voorafgaan door de tabel waaruit u deze wilt kiezen.
SELECT tbl_names.id, name, section
FROM tbl_names
INNER JOIN tbl_section
ON tbl_names.id = tbl_section.id
OF
SELECT tbl_section.id, name, section
FROM tbl_names
INNER JOIN tbl_section
ON tbl_names.id = tbl_section.id
Antwoord 3, autoriteit 4%
U zou dat doen door een volledig gekwalificeerde naam op te geven, bijvoorbeeld:
SELECT tbl_names.id as id, name, section FROM tbl_names, tbl_section WHERE tbl_names.id = tbl_section.id
Wat zou je de id van tbl_names geven
Antwoord 4, autoriteit 2%
De eenvoudigste oplossing is een join met USING
in plaats van ON
. Op die manier “weet” de database dat beide id
-kolommen eigenlijk hetzelfde zijn, en zal daar niet over gaan zeiken:
SELECT id, name, section
FROM tbl_names
JOIN tbl_section USING (id)
Als id
de enige algemene kolomnaam is in tbl_names
en tbl_section
, kun je zelfs een NATURAL JOIN
:
SELECT id, name, section
FROM tbl_names
NATURAL JOIN tbl_section
Zie ook: https://dev.mysql.com/ doc/refman/5.7/en/join.html
Antwoord 5, autoriteit 2%
Wat u hier waarschijnlijk echt wilt doen, is de union-operator als volgt gebruiken:
(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
Hier zijn de documenten ervoor https://dev.mysql.com /doc/refman/5.0/en/union.html
Antwoord 6, autoriteit 2%
Er zijn al veel antwoorden op uw vraag, u kunt het ook zo doen. U kunt uw tabel een aliasnaam geven en die als volgt in de selectiequery gebruiken:
SELECT a.id, b.id, name, section
FROM tbl_names as a
LEFT JOIN tbl_section as b ON a.id = b.id;
Antwoord 7
Als het formaat van de id’s in de twee tabellen varieert, dan wil je ze samenvoegen. Als zodanig kun je ervoor kiezen om een id uit één hoofdtabel te gebruiken, bijvoorbeeld als je table_customes
en table_orders
, en de id voor bestellingen is als “101“,”102“…”110“, gebruik er gewoon een voor klanten
select customers.id, name, amount, date from customers.orders;
Antwoord 8
SELECT tbl_names.id, tbl_names.name, tbl_names.section
FROM tbl_names, tbl_section
WHERE tbl_names.id = tbl_section.id