表格结构: 水果
| fID | fName | fAmount | SpeciesID |
|-----|-------|---------|-----------|
| 1 | Apple | 22 | 1 |
| 2 | Pear | 4 | 1 |
| 3 | Grape | 5 | 1 |
种:
| SpeciesID | SpeciesName | SpeciesPrice |
|-----------|-------------|--------------|
| 1 | Fruit | 100 |
父:
| pID | fID | ParentIDa | ParentIDb | Colour |
|-----------|-----|-----------|-----------|--------|
| 1 | 1 | 2 | 3 | Red |
我想要实现的输出:
| fName | fAmount | SpeciesName | SpeciesPrice | Colour | fID | fName | SpeciesName | SpeciesPrice |
|-------|:-------:|-------------|--------------|--------|-----|-------|-------------|--------------|
| Apple | 22 | Fruit | 100 | Red | 2 | Pear | Fruit | 100 |
| Apple | 22 | Fruit | 100 | Red | 3 | Grape | Fruit | 100 |
前5列用于子项,Color从Parent表中获取。 现在最重要的部分,我需要使用ParentIDa(第一个结果)和ParentIDb(第二个结果)使用Fruit表和fID再次添加到列中,然后再加入父类表的Species。
简而言之,一些水果有父母,在父表中列出,我想首先显示子信息,然后是父母1信息,第二个结果应该是相同的子信息+父母2信息。
这是我到目前为止所得到的:
SELECT fName,fAmount,SpeciesName,SpeciesPrice,Colour,fID,sub.*
FROM Fruit f
INNER JOIN Parent pa ON (f.fID = pa.fID)
INNER JOIN Species s ON (a.SpeciesID = s.SpeciesID)
INNER JOIN (
SELECT fID,fName,SpeciesID
FROM Fruit
WHERE pa.ParentIDa = f.fID) sub;
我只是无法使内部查询工作,我需要以某种方式使用输出的主要fID将其用于子查询。
答案 0 :(得分:1)
认为问题是在子选择中你不能参考外部查询。尽量不要进行子选择,只需在最后一个语句中使用Fruit加入,并为此表分配另一个别名。
INNER JOIN Fruit f2 WHERE pa.ParentIDa = f2.avatarID
答案 1 :(得分:1)
我使用sqlFiddle提问,请参阅ed sqlFiddle
您的确切输出是:
SELECT f.fName,f.fAmount,s.SpeciesName,s.SpeciesPrice, p.Colour, f.fID, f.fName, s.SpeciesName, s.SpeciesPrice
FROM Fruit f
INNER JOIN Species s ON f.SpeciesID = s.SpeciesID
INNER JOIN Parent p ON f.fID != p.fID
如果你想看到相同的id使用;
INNER JOIN Parent p ON f.fID = p.fID
使用时!=运算符输出为:
Pear 4 Fruit 100 Red 2 Pear Fruit 100
Grape 5 Fruit 100 Red 3 Grape Fruit 100
如果你使用=运算符输出是:
Apple 22 Fruit 100 Red 1 Apple Fruit 100
编辑: ParentIDa和ParentIDb联合。
SELECT f.fName,f.fAmount,s.SpeciesName,s.SpeciesPrice, p.Colour, f.fID, f.fName, s.SpeciesName, s.SpeciesPrice
FROM Fruit f
INNER JOIN Parent p ON (p.ParentIDa = f.fID or p.ParentIDb = f.fID)
INNER JOIN Species s ON f.SpeciesID = s.SpeciesID;
答案 2 :(得分:0)
不是你需要的吗?
SELECT f.fName,f.fAmount,s.SpeciesName,s.SpeciesPrice, pa.Colour, f.fID, f.fName, s.SpeciesName, s.SpeciesPrice
FROM Fruit f
INNER JOIN Parent pa ON f.fID = pa.fID
INNER JOIN Species s ON f.SpeciesID = s.SpeciesID
WHERE pa.ParentIDa = f.fID
或
SELECT f.fName,f.fAmount,s.SpeciesName,s.SpeciesPrice, pa.Colour, f.fID, f.fName, s.SpeciesName, s.SpeciesPrice
FROM Fruit f
INNER JOIN Parent pa ON f.fID = pa.fID AND pa.ParentIDa = f.fID
INNER JOIN Species s ON f.SpeciesID = s.SpeciesID
答案 3 :(得分:0)
谢谢大家,现在得到了答案:
SELECT f.fName,f.fAmount,s.SpeciesName,s.SpeciesPrice, p.Colour, f2.fID, f2.fName, f2.SpeciesID, s2.SpeciesName, s2.SpeciesPrice
FROM Fruit f
INNER JOIN Species s ON f.SpeciesID = s.SpeciesID
INNER JOIN Parent p ON f.fID = p.fID
INNER JOIN Fruit f2 ON p.ParentIDa = f2.fID OR p.ParentIDb = f2.fID
INNER JOIN Species s2 ON f2.SpeciesID = s2.SpeciesID;
请参阅sqlFiddle