我最近被分配了創建拍賣系統的任務。在我的工作中,我遇到過很多場合,包含連接的SQL查詢由於列名不明確而無法執行。考慮這個(簡化的)表結構的拍賣:如何避免列名衝突?
表auction
:
id
name
uid
表(創建該拍賣的用戶的ID) item
:
id
name
uid
aid
price
(初始價格)(其中項目是可用的拍賣的ID)
表user
:
id
name
表bid
:
id
uid
iid
(項,它的價格已經提出)(即放置在出價的用戶的ID)price
(所報的價格)
正如你所看到的,有一些有衝突的名稱很多列。加入這些表格需要採取一些措施來消除歧義。
我可以想出兩種方法來做到這一點。首先是對列進行重命名,並在其前面添加縮寫表名稱,以便拍賣ID將變爲a_id
,商品ID將變爲i_id
,並且bid
表中的商品ID將變爲b_i_id
。這非常穩固,但降低了列名的可讀性。
另一種方式我能想到的是寫明確的查詢:
SELECT `bid`.`id`, `user`.`name`, `bid`.`price`
FROM `bid`
JOIN `item` ON `item`.`id` = `bid`.`iid`
JOIN `user` ON `user`.`id` = `bid`.`uid`
JOIN `auction` ON `auction`.`id` = `item`.`aid`
WHERE `bid`.`price` > `item`.`price`
AND `auction`.`id` = 1
GROUP BY `user`.`id`
ORDER BY `bid`.`price` DESC;
這是可讀的和明確的,但需要大量額外的按鍵。
我使用第二種方法,但也許有其他人,你已經成功地用於類似的情況?你如何避免SQL查詢中的列名衝突?
如果'keystrokes'是當你程序,你需要重新考慮你的職業生涯路徑的關注! – RichardTheKiwi 2011-02-23 11:57:46
@Richard:好的,你讓我用這個,這句話值得+1 :) – mingos 2011-02-23 12:10:32
放下反引號',這些與SQL無關(檢查標準!)並保存一些擊鍵。 – 2011-02-23 14:19:58