Anonymous
Anonymous asked in 電腦與網際網路程式設計 · 1 decade ago

請教關於這段SQL

我先說明我要幹麻

我要做一個紅利點數兌換商品的系統

兩個Table

* item - 要被兌換的商品

** id

** name

** intro

** bouns_id

* bouns - 兌換點數

** id

** bouns

假設我要列出點數為400的所有商品,以下是我所寫的SQL

SELECT DISTINCT item.id, item.name, item.intro FROM item, bouns WHERE item.bouns_id = (SELECT id From bouns WHERE bouns = 400)

請問是否有更好的寫法呢?

Update:

To Mini:

抱歉.. 是我的錯

不過Steven已經給我回答了.. 真是謝謝您:D

To Steven:

多謝.. 的確有成功

也感激指正我的破英文.. haha

Thanks a lot:P

要晚點才能給最佳解答.. 抱歉囉

Update 2:

請問.. 以Steven給我的兩個SQL語句來說,哪種效率會比較高呢?

2 Answers

Rating
  • 振輔
    Lv 5
    1 decade ago
    Favorite Answer

    1.item 跟 bonus沒有設關聯, 這會造成聯集狀態, 也就是兩個表格筆數相乘的狀況, 導致要用到Distinct

    2.這樣寫即可

    SELECT item.id, item.name, item.intro

    FROM item, bouns

    WHERE item.bouns_id = bouns.id

    and bouns = 4003.bouns 應該取名為bonus才對

    4.表格名稱最好不要跟欄位名稱一樣

    5.主索引鍵欄位最好是取成一樣的比較容易辨識

    2007-08-21 00:54:04 補充:

    Sorry! 連在一齊了

    請分開

    and bouns = 400

    3.bouns 應該取名為bonus才對

    2007-08-21 00:56:43 補充:

    如果要用你的sql來改

    可以這樣

    SELECT item.id, item.name, item.intro

    FROM item

    WHERE item.bouns_id in (SELECT id From bouns WHERE bouns = 400)

    2007-08-21 08:03:47 補充:

    一般來說,

    primary key 的join效能最佳,就是我寫的第一個SQL方法,

    另一個SQL是以in(....)的方式, 效能會差一點,

    但請注意! 效能的好壞取決於很多因素,

    像是SQL 關聯, join方式, 是否用到最佳的index?等等.

    • Login to reply the answers
  • 1 decade ago

    基本上你的問題有點看不懂

    你說有兩個table但你沒說是哪兩個table

    你上面給的欄位值看不出來是分別屬於哪個table的

    如果要列出點數為400的所有商品

    直接用join的方式就可以了

    Source(s): ME
    • Login to reply the answers
Still have questions? Get your answers by asking now.