我有三张桌子:

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/

10-13 00:49