1
我有一個表(例如Motherboard
),其中包含我正在尋找的價值(如RAM
)...並讓我們說,主板有2個領域爲PK,如:model_id
和part_number
... 如果我有model_id和所有的RAM容量是相同的,我不在乎零件編號。查詢將是這樣的:如何申請加入只有它需要
SELECT Top 1 ram FROM Motherboard WHERE model_id = @model_id
否則,我們不得不將表(例如MyMBInfo
),我們存儲的PART_NUMBER。
SELECT Top 1 ram FROM Motherboard m
LEFT JOIN MyMBInfo i ON SUBSTRING(i.model_id_and_other_stuff, 1, 9) = m.model_id and i.part_number = m.part_number
WHERE model_id = @model_id
我可以一直使用第二個查詢,但它似乎是一個相當昂貴(加入,子等)......我有一個像數以百萬計需要弄清楚,拉姆值的主板。因爲(在我的數據中)不同部件具有不同內存的概率非常少(如1%),所以我想應用第一個查詢,並應用第二個查詢。
如果你知道如何編寫,結合這兩個類似的查詢:
SELECT Top 1 ram ... WHERE .... distinct_counter > 1 and part_number in SELECT ... FROM MyMBInfo WHERE...)
或者創建一個輔助功能。
請分享。
我可以在「SUBSTRING」連接上說「eww」嗎? :如果你有'a'索引,P'a LIKE b +'%''應該會更快。更好的是,將密鑰隔離到自己的列中 - 最好是浪費磁盤空間而不是用戶的時間 - 然後定期進行左連接;加入黑客'model_id_and_other_stuff'是非常不理想的。 – Amadan
model_id_and_other_stuff作爲字段名稱是您需要重新設計表格的線索。你不應該在一個字段中存儲多條信息,然後必須使用子字符串將其排除。如果你需要加入那個更糟糕的領域!請重構以解決您非常基本的設計缺陷。 – HLGEM