我遇到一个问题,即用户在表格中设置了他的偏好。
该表有超过5列。现在我想用preference
表中的条件值搜索另一个视图。
示例:
Preference
表格有price range
,colour
等
所以我需要搜索价格和颜色的产品。
现在我想在SQL Server本身中执行它,即传递首选项id,它将始终返回单行,然后从列中获取min price
,max price
等值,然后创建一个搜索查询。
问题是我不知道如何将偏好行列值存储在变量中以便我可以使用它。
我正在使用Entity Framework,因此我也无法使用动态SQL。
我只想知道如何存储首选项表的列值。
我只知道我可以这样做:
@colour = Select Top 1 Colour from preferences;
但是像这样我需要为每个变量编写这个查询。是否有更好的方法称为CTE等。
答案 0 :(得分:17)
您必须声明变量,然后您可以使用它们来分配SELECT
中的值并稍后使用它们:
-- declare the variables
DECLARE @min_price decimal(8,2)
DECLARE @max_price decimal(8,2)
DECLARE @color varchar(20)
-- assign the values into the variables
SELECT
@min_price = MIN_PRICE
, @max_price = MAX_PRICE
, @color = Colour
FROM Preference
WHERE preference_id = (parameter of prefrence id)
-- Now you get all 3 values of Colour, Min Price, Max Price,
-- then these 3 values can be used for your query
SELECT *
FROM products
WHERE colour = @color
AND price BETWEEN min_price AND @max_price
或者,如果在其他地方没有使用这3个变量,您可以进行单个查询:
SELECT *
FROM products p
INNER JOIN
(
SELECT Colour, MIN_PRICE, MAX_PRICE
FROM Preference
WHERE preference_id = (parameter of prefrence id)
) pre ON (p.colour = pre.Colour AND p.price BETWEEN pre.MIN_PRICE AND pre.MAX_PRICE)
答案 1 :(得分:0)
DECLARE @A int, @B int
SELECT
@A = Col1,
@B = Col2
FROM SomeTable
WHERE ...
或
DECLARE @T TABLE (
A int,
B int
)
INSERT INTO @T ( A, B )
SELECT
Col1,
Col2
FROM SomeTable
WHERE ...