gpt4 book ai didi

sql - 强制内部查询在外部查询之前执行

转载 作者:行者123 更新时间:2023-12-04 20:56:27 25 4
gpt4 key购买 nike

我有两个表需要加入:

Table VarValues 的字段 Value 是一个 varchar 并且包含自定义属性,这些属性可以是属性类型的 text 和 int

Table Vars 具有属性类型。

表项中有项,特别是一个 ID 和全文索引的数据,我需要搜索。

当我这样查询时:

SELECT 
distinct SelectedItems.itemid,SelectedItems.fileid
FROM
(
SELECT [values].itemid, convert(int, [value]) as fileid
FROM
VarValues [values]
JOIN Vars vars ON [values].VarID = vars. ID
WHERE
[type] = 6 --This type is an int
AND
[values].[value] <> ''
) as SelectedItems
JOIN containstable(items, *, '<some query>') as items ON SelectedItems.fileid = items.[KEY]

内部查询只返回整数作为 fileid,但是当整个查询运行时我得到一个错误,因为 VarValues 中的第一行包含文本,尽管类型不是 6。

查询优化器是否干扰了我的内部查询?我怎样才能让它停止?还是我这样做完全错了?

最佳答案

优化器可以扩展 View (包括内联 View )并自由决定过滤器顺序。

换句话说,它可能首先执行与全文表的连接,然后在 type = 6 上过滤结果(在您的情况下它似乎正在这样做)。

您可以尝试将 OPTION (FORCE ORDER) 添加到您的查询中,但是,它只能保证连接操作中表的顺序,而不是应用过滤器的顺序。

尝试像这样重写您的查询:

SELECT 
distinct SelectedItems.itemid,SelectedItems.fileid
FROM
(
SELECT [values].itemid, CAST(CASE WHEN IsNumeric([value]) = 1 THEN [value] END AS INT) AS field
FROM
VarValues [values]
JOIN Vars vars ON [values].VarID = vars. ID
WHERE
[type] = 6 --This type is an int
AND
[values].[value] <> ''
) as SelectedItems
JOIN containstable(items, *, '<some query>') as items ON SelectedItems.fileid = items.[KEY]

关于sql - 强制内部查询在外部查询之前执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5661196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com