在mysql的IN子句中,什么是更好的子查询vs文字

时间:2015-09-01 10:00:35

标签: mysql sql select subquery literals

子句中的子查询:

SELECT * FROM TABLE1 WHERE IN (SELECT Field1 FROM TABLE2)

字面上的文字:

SELECT * FROM TABLE1 WHERE IN (1,2,3,4)

哪个查询更好?

追加

好的,让我详细说明我的数据库

-- `BOARD` is main board table
CREATE TABLE BOARD (
    BoardKey INT UNSIGNED,
    Content TEXT,
    PRIMARY KEY (BoardKey)
)

-- `VALUE` is extra value table  
CREATE TABLE VALUE (
    BoardKey INT UNSIGNED,
    Value TEXT
)

这个例子是使用EAV字段搜索电路板记录 第一步是从VALUE表中提取所需的板键 下一步是使用提取的板键从BOARD表中搜索板

  

这个例子只是一个例子,   所以我不需要重组表格设计

子句中的子查询:

SELECT * FROM BOARD WHERE (SELECT BoardKey FROM VALUE WHERE Value='SOME')

字面上的文字:

SELECT BoardKey FROM VALUE WHERE AND Value='SOME'
  

获取BoardKey的列表并添加一些变量

SELECT * FROM BOARD WHERE BoardKey IN (1,2,3,4)

1 个答案:

答案 0 :(得分:0)

这一切都取决于您的初始要求。如果您知道值(此处为1,2,3,4)是静态的,则可能需要对其进行硬编码。但如果它们将来会发生变化,最好使用子查询。通常子查询更耐用,但消耗更多资源。

请详细说明您的要求,以便我们能够理解问题并更好地回答您。

编辑1:

好的,首先,我从未在两张桌子上看过EAV模型,基本上是用一张桌子完成的。在这种情况下,当您可以将它们组合在一个表中时,您将难以在两个表中搜索该键。理想情况下,您的表应该是这样的:

CREATE TABLE BOARD
(
   BoardKey INT UNSIGNED,
   Content TEXT,
   Value TEXT
   PRIMARY KEY (BoardKey)
)

最后,你可以做到

SELECT * FROM BOARD WHERE Value='SOME'

如果值'SOME'将来会改变,最好坚持使用Subquery。希望它有所帮助,投票如果是这样回答。