1052: Kolom ‘id’ in veldlijst is dubbelzinnig

Ik heb 2 tabellen. tbl_namesen tbl_sectiondie beide het veld idbevatten. 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 USINGin 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 idde enige algemene kolomnaam is in tbl_namesen 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_customesen 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

Other episodes