子句中的子查询:
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)
答案 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。希望它有所帮助,投票如果是这样回答。