SQL - Spalte in der Feldliste ist mehrdeutig
Ich habe zwei Tabellen BUCHUNGEN und ARBEITER. Grundsätzlich gibt es die Tabelle für einen Arbeiter und eine Tabelle, um zu verfolgen, was der Arbeitnehmer zu tun hat, in einem Zeitrahmen aka Buchung. Ich bin versucht, um zu überprüfen, ob es einen verfügbaren Arbeiter für einen job, so dass ich die Abfrage der Buchung zu überprüfen, ob angeforderte Zeit zur Verfügung hat, der Arbeitnehmer zwischen der start-Ende-Datum. Ich jedoch stecken auf den nächsten Teil. Die Rückkehr ist die Liste der Beschäftigten, die zu tun haben, dass Zeit zur Verfügung steht. Ich habe gelesen, dass ich teilnehmen könnte die Tabelle übergeben, auf eine gemeinsame Spalte, also versuchte ich mache einen inner join mit der WORKER_NAME Spalte, aber wenn ich versuche, dies zu tun bekomme ich einen Mehrdeutiger Fehler. Dies führt mich zu glauben, dass ich das falsch verstanden das Konzept. Hat jemand verstehen, was ich, m versuchen zu tun und weiß, wie es zu tun, oder weiß, warum ich den folgenden Fehler. Danke Jungs !!!!
CREATE TABLE WORKER (
ID INT NOT NULL AUTO_INCREMENT,
WORKER_NAME varchar(80) NOT NULL,
WORKER_CODE INT,
WORKER_WAGE INT,
PRIMARY KEY (ID)
)
CREATE TABLE BOOKING (
ID INT NOT NULL AUTO_INCREMENT,
WORKER_NAME varchar(80) NOT NULL,
START DATE NOT NULL,
END DATE NOT NULL,
PRIMARY KEY (ID)
)
Abfrage
SELECT *
FROM WORKERS
INNER JOIN BOOKING
ON WORKER_NAME = WORKER_NAME
WHERE (START NOT BETWEEN '2010-10-01' AND '2010-10-10')
ORDER BY ID
#1052 - Column 'WORKER_NAME' in der on-Klausel mehrdeutig ist
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Abfrage die Spalte "worker_name" existiert in zwei Tabellen; in diesem Fall müssen Sie einen Verweis auf die tablename als Teil der Spalte Bezeichner.
In der Abfrage die Spalte
WORKER_NAME
undID
Spalten in beiden Tabellen vorhanden ist, woWORKER_NAME
behält die gleiche Bedeutung und dieID
ist re-purposed; in diesem Fall müssen Sie entweder angeben, die Sie verwendenWORKER_NAME
wie die Verknüpfung Suchbedingung oder 'Projekt entfernt' (umbenennen oder auslassen) die doppelteID
problem.Weil die
ID
SpaltenAUTO_INCREMENT
, ich gehe davon aus (hoffe!) Sie haben keine wirtschaftliche Bedeutung. Deshalb konnten Sie beide weggelassen werden, so dass ein natural join, der bewirkt doppelte Spalten projiziert " wird entfernt." Dies ist eine jener Situationen, in denen man sich wünscht SQL hatte einenWORKER ( ALL BUT ( ID ) )
type syntax, sondern man benötigt zu tun, es longhand. Es könnte einfacher sein im langen Lauf zu sich für eine einheitliche Namensgebung und benennen Sie die Spalten umWORKER_ID
undBOOKING_ID
bzw.Würden Sie auch brauchen, um zu identifizieren, ein business-key zu bestellen, z.B.
( START, WORKER_NAME )
:Zwei Ansätze ins Auge springen: drücken Sie die where-Klausel der Unterabfrage:
Alternativ ersetzen
SELECT *
mit einer Liste der Spalten, die Sie wollenSELECT
:Dieser Fehler kommt, nachdem Sie versuche zu rufen, ein Feld welches in beiden Tabellen vorhanden ist, daher sollten Sie eine Referenz. Etwa im Beispiel unten habe ich zuerst sagen
cod.coordinator
so, dass DBMS wissen, die Koordinatorin möchte ichSELECT project__number, surname, firstname,cod.coordinator FROM
KoordinatorenAS co JOIN hub_applicants AS ap ON co.project__number = ap.project_id JOIN coordinator_duties AS cod ON co.coordinator = cod.email