我有三张桌子:
TICKERS
id
ticker (varchar 100)
COEF
id
id_ticker
id_spre
coef (varchar 100)
SPRE
id
id_check
name (varchar 100)
我需要检索id_check=1的所有SPRE记录,然后为此结果,我必须获取SPRE.id=COEF.id_SPRE(一次)的所有记录,然后获取与COEF相关的所有ticker s(TICKERS.id=COEF.id_ticker)。
结果应该是:
SPRE.name
COEF.coef
TICKERS.ticker
TICKERS.ticker
TICKERS.ticker
....
....
SPRE.name
COEF.coef
TICKERS.ticker
TICKERS.ticker
TICKERS.ticker
(我已经重复了
tickers
,因为许多票应该有相同的COEF
)我想是这样的:
使用
id_check = 1
检索所有SPRE的查询,然后由UNION two选择一个子查询,第一个子查询用于获取COEF.id_spre = SPRE.id
,第二个子查询用于获取TICKERS.id = COEF.id_ticker
的所有tickers.... 但是怎么写呢?
最佳答案
等待。。你想把结果剔除吗?您想让与一个spre相关的所有tickers都返回到同一行吗?
不管怎样,从目前的情况看,可能会用到以下内容:
SELECT
s.name
,c.coef
,t.ticker
FROM spre as s
INNER JOIN coef as c
ON c.id_spre = s.id
INNER JOIN tickers AS t
ON t.id = c.id_ticker
WHERE s.id_check= 1
http://sqlfiddle.com/#!3/c984a/15
如果需要限制SPRE,则以下操作是否有效:
SELECT
s.name
,c.coef
,t.ticker
FROM
(SELECT * FROM spre WHERE id_check=1 LIMIT 0,5 ) as s
INNER JOIN coef as c
ON c.id_spre = s.id
INNER JOIN tickers AS t
ON t.id = c.id_ticker
使用MSSQL语法:http://sqlfiddle.com/#!3/c984a/25
关于mysql - 与UNION的子查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10294143/