2016-08-23 19 views
2

我有以下兩個表:查詢沒有產生什麼它應該

表格作者:

AuthorID Name 
A   John 
B   Alex 
C   Carl 

表AuthorsCompatibility:

AuthorID1 AuthorID2 Compatibility 
A   B   5.0 
A   C   4.0 
B   C   4.5 

我想產生如下:

AuthorID1 Name1 AuthorID2 Name2 Compatibility 
A   John  B   Alex 5.0 
A   John  C   Carl 4.0 
B   Alex  C   Carl 4.5 

Th是我嘗試的,但我知道它不工作:

select AuthorID1, A.Name, AuthorID2, B.Name, Compatibility 
from AuthorsCompatibility, Authors as A, Authors as B 
where AuthorID1=A.AuthorID and AuthorID2=B.AuthorID 
+0

你目前的結果? –

+1

爲什麼它不起作用?你會得到什麼錯誤?除了陳舊的語法,你的查詢沒有任何問題。 – dasblinkenlight

+0

MySQL和SQLite是2種不同的產品,請刪除您不使用的產品標籤 – Shadow

回答

2

你沒有正確加入(你使用的是非常舊的風格的聯接)。嘗試下面的連接:

SELECT 
    ac.AuthorID1 
    ,a1.Name AS Name1 
    ,ac.AuthorID2 
    ,a2.Name AS Name2 
    ,ac.Compatibility 
FROM AuthorsCompatibility ac 
INNER JOIN Authors a1 
    ON ac.AuthorID1 = a1.AuthorID 
INNER JOIN Authors a2 
    ON ac.AuthorID2 = a2.AuthorID 

使用此樣本數據;

CREATE TABLE Authors (AuthorID nvarchar(1), Name nvarchar(10)) 
INSERT INTO Authors 
VALUES 
('A', 'John') 
,('B', 'Alex') 
,('C', 'Carl') 

CREATE TABLE AuthorsCompatibility (AuthorID1 nvarchar(1), AuthorID2 nvarchar(1), Compatibility money) 
INSERT INTO AuthorsCompatibility (AuthorID1, AuthorID2, Compatibility) 
VALUES 
('A', 'B', 5.0) 
,('A', 'C', 4.0) 
,('B', 'C', 4.5) 

給出這個結果;

AuthorID1 Name1 AuthorID2 Name2 Compatibility 
A   John B   Alex 5.00 
A   John C   Carl 4.00 
B   Alex C   Carl 4.50 
2

你可以把它改寫JOIN形式這樣

select ac.AuthorID1, A.Name, ac.AuthorID2, B.Name, ac.Compatibility 
    from AuthorsCompatibility ac 
    join Authors as A 
    on ac.AuthorID1 = A.AuthorID 
    join Authors as B 
    on ac.AuthorID2 = B.AuthorID 
4
SELECT ac.AuthorID1, a.Name, ac.AuthorID2, b.Name, ac.Compatibility 
FROM AuthorsCompatibility ac 
INNER JOIN AUTHORS a ON ac.AuthorID1 = a.AuthorID 
INNER JOIN AUTHORS b ON ac.AuthorID2 = b.AuthorID 
0

我已經試過您的查詢,它工作正常:

CREATE TABLE #Authors (AuthorID nvarchar(1), Name nvarchar(10)) 
INSERT INTO #Authors 
VALUES 
('A', 'John') 
,('B', 'Alex') 
,('C', 'Carl') 

CREATE TABLE #AuthorsCompatibility (AuthorID1 nvarchar(1), AuthorID2 nvarchar(1), Compatibility money) 
INSERT INTO #AuthorsCompatibility (AuthorID1, AuthorID2, Compatibility) 
VALUES 
('A', 'B', 5.0) 
,('A', 'C', 4.0) 
,('B', 'C', 4.5) 

select 
    AuthorID1, A.Name, AuthorID2, B.Name, Compatibility 
from #AuthorsCompatibility, #Authors as A, #Authors as B 
where AuthorID1=A.AuthorID and AuthorID2=B.AuthorID 

drop table #AuthorsCompatibility,#Authors 
+0

在您對相同問題的迴應中使用別人的樣本數據通常是不被贊同的。 –

+0

我沒有給OP解決方案,只是通知他/她的查詢工作。我沒有寫我的查詢,因爲意味着我插入值的聲明 –

相關問題