我正在使用零件/摩托車裝備的Mysql數據庫,其中所有零件都鏈接到可以安裝的所有摩托車上。它看起來像這樣:Mysql:在字段的最小值和最大值之間查詢缺少的行
part_number motorcycle year
1000 HONDA_CBR1000 2008
1000 HONDA_CBR1000 2009
1000 HONDA_CBR1000 2010
1000 HONDA_CBR1000 2011
1000 HONDA_CBR1000 2012
1000 HONDA_CBR1000 2013
1001 HONDA_CBR600 2008
1001 HONDA_CBR600 2009
1001 HONDA_CBR1000 2008
1001 HONDA_CBR1000 2009
1001 HONDA_CBR1000 2013
因此,這意味着:
- 部分#1000可在本田CBR1000安裝2008年至2013年
- 部分#1001可在本田CBR600安裝從2008年到2009年,以及從2008年到2013年的本田CBR1000。
不幸的是,該表(它有〜650,000行)並不總是正確填寫。在這個例子中,你會發現下面的線條缺失:
part_number motorcycle year
1001 HONDA_CBR1000 2010
1001 HONDA_CBR1000 2011
1001 HONDA_CBR1000 2012
由於部分#1001可以在HONDA_CBR1000安裝從2008年,2009年和2013年也可以安裝在「被遺忘的」年之間(2010年,2011年和2012年)。
所以簡單的查詢:
SELECT * FROM mytable WHERE motorcycle = 'HONDA_CBR1000' AND year = '2011'
只會檢索該行的部分#1000(而在現實中,部分#1001也在這條自行車安裝)。
用簡單的英語,我想喜歡
SELECT * FROM mytable WHERE motorcycle = 'HONDA_CBR1000'
AND ("minimum year of part_number applicable to HONDA_CBR1000" <= '2011')
AND ("maximum year of part_number applicable to HONDA_CBR1000" >= '2011')
查詢會檢索所有結果(1000和1001)。
但是我怎麼能問在SQL?你認爲這太慢了嗎?
感謝您的幫助!
查看https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple- sql-query – Strawberry