各位mysql高手,小弟來這邊請教一個問題,稿不出來...
資料表如下圖,
皆為同一個資料表
主鍵(sn)1、2、3、4
訂單三筆(orders_sn) 1、2、3
訂單狀態(status_sn)他有 ""失敗時"" status_sn=3
我就不抓取那筆訂單
所以我只會抓取到
主鍵 1 、4
用in我成功的抓取到了。
select * from aa
where orders_sn
not in ( select orders_sn from aa
where status_sn
='3' );
但我考慮到往後的效率問題。
exists 要怎寫呢?或join?
附上資料表
CREATE TABLE `aa` (
`sn` int(11) NOT NULL,
`file_sn` int(10) NOT NULL,
`orders_sn` int(10) NOT NULL,
`status_sn` int(10) NOT NULL COMMENT '0等待中 1成功 2處理中 3失敗 '
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
INSERT INTO `aa` (`sn`, `file_sn`, `orders_sn`, `status_sn`) VALUES
(1, 1, 2, 1),
(2, 1, 1, 3),
(3, 1, 1, 1),
(4, 1, 3, 1);
ALTER TABLE `aa` ADD PRIMARY KEY (`sn`);
ALTER TABLE `aa` MODIFY `sn` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
如果要一句寫完,可能只有用 subquery,如果考慮 performance,個人建議兩種方式: