簡體   English   中英

SQL嵌套查詢不返回任何內容

[英]SQL nested query returns nothing

我是SQL的初學者,很難理解邏輯查詢。 在這個特定問題中,我試圖找到在加利福尼亞購買的Track。

這是表格。

CREATE TABLE [InvoiceLine]
(
[InvoiceLineId] INTEGER  NOT NULL,
[InvoiceId] INTEGER  NOT NULL,
[TrackId] INTEGER  NOT NULL,
[UnitPrice] NUMERIC(10,2)  NOT NULL,
[Quantity] INTEGER  NOT NULL,
CONSTRAINT [PK_InvoiceLine] PRIMARY KEY  ([InvoiceLineId]),
FOREIGN KEY ([InvoiceId]) REFERENCES [Invoice] ([InvoiceId]) 
    ON DELETE NO ACTION ON UPDATE NO ACTION,
FOREIGN KEY ([TrackId]) REFERENCES [Track] ([TrackId]) 
    ON DELETE NO ACTION ON UPDATE NO ACTION
);

CREATE TABLE [Invoice]
(
[InvoiceId] INTEGER  NOT NULL,
[CustomerId] INTEGER  NOT NULL,
[InvoiceDate] DATETIME  NOT NULL,
[BillingAddress] NVARCHAR(70),
[BillingCity] NVARCHAR(40),
[BillingState] NVARCHAR(40),
[BillingCountry] NVARCHAR(40),
[BillingPostalCode] NVARCHAR(10),
[Total] NUMERIC(10,2)  NOT NULL,
CONSTRAINT [PK_Invoice] PRIMARY KEY  ([InvoiceId]),
FOREIGN KEY ([CustomerId]) REFERENCES [Customer] ([CustomerId]) 
    ON DELETE NO ACTION ON UPDATE NO ACTION
);

CREATE TABLE [Track]
(
[TrackId] INTEGER  NOT NULL,
[Name] NVARCHAR(200)  NOT NULL,
[AlbumId] INTEGER,
[MediaTypeId] INTEGER  NOT NULL,
[GenreId] INTEGER,
[Composer] NVARCHAR(220),
[Milliseconds] INTEGER  NOT NULL,
[Bytes] INTEGER,
[UnitPrice] NUMERIC(10,2)  NOT NULL,
CONSTRAINT [PK_Track] PRIMARY KEY  ([TrackId]),
FOREIGN KEY ([AlbumId]) REFERENCES [Album] ([AlbumId]) 
    ON DELETE NO ACTION ON UPDATE NO ACTION,
FOREIGN KEY ([GenreId]) REFERENCES [Genre] ([GenreId]) 
    ON DELETE NO ACTION ON UPDATE NO ACTION,
FOREIGN KEY ([MediaTypeId]) REFERENCES [MediaType] ([MediaTypeId]) 
    ON DELETE NO ACTION ON UPDATE NO ACTION
);

這是我嘗試過的。

SELECT T.name
FROM Track T, InvoiceLine L
WHERE T.trackid=L.trackid AND
L.invoiceid IN (SELECT I.invoiceid
FROM Invoice I
WHERE I.billingcity="California");

查詢不返回任何內容。 邏輯有什么問題?

SELECT
      T.name
FROM Track T
      INNER JOIN InvoiceLine L ON T.trackid = L.trackid
      INNER JOIN invoice I ON L.InvoiceId = I.InvoiceId
WHERE I.BillingState = 'California'

Track連接到InvoiceLine ,后者連接到Invoice

請不要通過where子句使用古老的聯接方式。 最簡單的技巧是禁止表格之間出現任何逗號,例如,注意以下逗號: FROM Track T, InvoiceLine L避免使用逗號。

我假設您希望在BillingState持有的加利福尼亞州不是該名稱的城市(如果存在)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM