我是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;
答案 0 :(得分:7)
看起来你想要一些括号:
AND (exch.name = 'AMEX'
OR exch.name = 'CBOE'
OR exch.name = 'ISE'
OR exch.name = 'PHLX')
你也可以使用IN:
AND exch.name IN ('AMEX','CBOE','ISE','PHLX')
答案 1 :(得分:6)
我认为你应该使用() 例如
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;
答案 2 :(得分:1)
尝试此查询并验证是否是因为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 in ('AMEX' , 'CBOE', 'ISE','PHLX')
ORDER BY trddata.id
LIMIT 100;