我是SQL新手,无法理解为什么这个查询没有返回结果但是我知道这是因为我正在使用OR条件不正确.如果
有人可以请出示正确的方法来解决这个问题吗?
SELECT trddata.id, trddata.ts, instr.name, instr.underlying, instr.expiration,instr.strike, instr.callput,opnint.vol, trdind.name ind,exch.name exch, trddata.price,trddata.bidprcbbo,trddata.askprcbbo
FROM trdopt trddata
JOIN instropt instr
ON trddata.optid = instr.id
JOIN trdindopt trdind
ON trdind.id = trddata.ind
JOIN exchopt exch
ON trddata.exchcode = exch.id
JOIN opnintopt opnint
ON opnint.optid = trddata.optid
WHERE opnint.ds = DATE_FORMAT(trddata.ts, '%Y-%m-%d')
AND trddata.id >= 71125752
AND trddata.ts <= '2013-06-20 16:30:36'
AND instr.underlying = 'AAPL'
AND exch.name = 'AMEX'
OR exch.name = 'CBOE'
OR exch.name = 'ISE'
OR exch.name = 'PHLX'
ORDER BY trddata.id
LIMIT 100;
Run Code Online (Sandbox Code Playgroud)
看起来你想要一些括号:
AND (exch.name = 'AMEX'
OR exch.name = 'CBOE'
OR exch.name = 'ISE'
OR exch.name = 'PHLX')
Run Code Online (Sandbox Code Playgroud)
你也可以使用IN:
AND exch.name IN ('AMEX','CBOE','ISE','PHLX')
Run Code Online (Sandbox Code Playgroud)
我认为你应该使用()例如
SELECT trddata.id, trddata.ts, instr.name, instr.underlying, instr.expiration,instr.strike, instr.callput,opnint.vol, trdind.name ind,exch.name exch, trddata.price,trddata.bidprcbbo,trddata.askprcbbo
FROM trdopt trddata
JOIN instropt instr
ON trddata.optid = instr.id
JOIN trdindopt trdind
ON trdind.id = trddata.ind
JOIN exchopt exch
ON trddata.exchcode = exch.id
JOIN opnintopt opnint
ON opnint.optid = trddata.optid
WHERE opnint.ds = DATE_FORMAT(trddata.ts, '%Y-%m-%d')
AND trddata.id >= 71125752
AND trddata.ts <= '2013-06-20 16:30:36'
AND instr.underlying = 'AAPL'
AND (exch.name = 'AMEX'
OR exch.name = 'CBOE'
OR exch.name = 'ISE'
OR exch.name = 'PHLX')
ORDER BY trddata.id
LIMIT 100;
Run Code Online (Sandbox Code Playgroud)