※ 引述《andreli (小狗跟正妹是我的死穴)》之銘言:
: 標題: [SQL ] 重複table欄位名稱 Duplicate column name:
: 最近在修改一個網站, 使用MySQL 5.1.36:
: 在select的時候, 因為原作者在很多資料表上都使用相同名稱,
: 像是每個資料表的流水號都叫sn
: 所以我在select join兩個資料表的時候因為都使用*來當作欲選取欄位(就是全選),
: 我自己猜想是不是因為這樣的關係產生出Duplicate column name 'sn'的錯誤訊息。
: 如果想要解決, 有什麼好方法嗎?
: 還是只能一個一個慢慢select出來, 不要使用*呢?
: 謝謝各位前輩的回覆。
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 221.120.65.208
: 推 rushcat:SELECT TableA.*, TableB.* FROM ... 這樣可以嗎? 10/29 16:19
: → grence:select應該沒問題,大概是where, order或哪要比對造成混淆 10/29 18:44
: → andreli:一樓說的方法不行, 我最後使用一個一個列出就可以了... 10/29 22:16
: 推 rushcat:應該是二樓說的 不然alias設好 不應該會出現這種問題阿@"@ 10/29 23:01
我列一下原始的SQL,
SELECT COUNT(*) _count_ FROM (
SELECT p.*, m.* FROM cmn_product p
JOIN cmn_member m ON p.owner_ = m.sn_
WHERE p.enabled_ = 1 AND p.visible_ = 1 AND m.enabled_ = 1 AND
m.verify_ = 1 AND m.advance_ = 1
GROUP BY m.name_
ORDER BY p.product_hits DESC
) t
上面是接手人家的程式慢慢找出來可能發生錯誤的地方的原始碼,
錯誤代碼和訊息是1060的Duplicate column name 'sn_'
我將SQL中sub select p.*,m.*的部份改成m.sn_, m.id...就可以正常select了,
兩個資料表中欄位的流水號auto increasement都是叫sn_,
我一開始也是往別名錯誤的地方想, 可是收設了還是不行。
不知道各位前輩有沒有別的想法或看法呢?
另外我想問, 所有的資料表流水號叫sn_這樣的設計方法好嗎?
因為就我自己之前設計時, 每個資料表的流水號名稱都會取跟資料表名稱有關,
像是member_detail, 我就會取md_sn或md_id這樣子, 讓我之後好分辨與取值,
但是原本製作這程式的也算一間有點規模的公司,
想請問各位前輩, 這樣製作上有什麼好處呢? 還是它在搭配smarty有啥好處呢?
謝謝各位前輩的指教, 謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 221.120.1.190