如何在何处使用Oracle SQL?
我有一个简单的SQL语句来返回产品数据。基本上,我可以输入一个项目的名称,如果该项目与exact匹配,则什么也不做,如果没有与exact请求匹配的项目,我希望在我的SQL中切换“WHERE”语句。目前看来:如何在何处使用Oracle SQL?,sql,Sql,我有一个简单的SQL语句来返回产品数据。基本上,我可以输入一个项目的名称,如果该项目与exact匹配,则什么也不做,如果没有与exact请求匹配的项目,我希望在我的SQL中切换“WHERE”语句。目前看来: SELECT Product_ID, Product_Name, Product_Type, Product_Cost FROM tblProducts WHERE Product_Name = 'iPhone' 很明显,这只会退回名为“iPhone”的产品。iphone
SELECT
Product_ID,
Product_Name,
Product_Type,
Product_Cost
FROM tblProducts
WHERE Product_Name = 'iPhone'
很明显,这只会退回名为“iPhone”的产品。iphone5不会被退回
我试图做的是,如果查询使用第一个Where
子句获取0行,那么它会触发第二个Where
子句,类似于:
WHERE Product_Name like '%iPhone%'
ID Name Type Cost Matched
-----------------------------------------------
101| New iPhone Case| Electronics | 4.99 | 1
因此,如果没有完全称为iPhone的产品,请返回任何名称中包含iPhone的产品
然后我想在查询结果窗格上显示它,因此尝试在输出上创建一个额外的字段,一个表示“如果使用了第二个Where子句,则将值设置为1”的标志。
其中1=无精确匹配,0=精确匹配
所以我最终会得到这样的结果:
WHERE Product_Name like '%iPhone%'
ID Name Type Cost Matched
-----------------------------------------------
101| New iPhone Case| Electronics | 4.99 | 1
到目前为止,我已经:
SELECT
Product_ID,
Product_Name,
Product_Type,
Product_Cost
CAST(0 AS VARCHAR2(1)) as match
FROM tblProducts
WHERE Product_Name = 'iPhone'
但无法计算出如何在何处进行切换,举例说明:
SELECT
Product_ID,
Product_Name,
Product_Type,
Product_Cost
CAST(0 AS VARCHAR2(1)) as match
FROM tblProducts
WHERE Product_Name = 'iPhone'
if (results = 0){
SELECT
Product_ID,
Product_Name,
Product_Type,
Product_Cost
CAST(1 AS VARCHAR2(1)) as match
FROM tblProducts
WHERE Product_Name like '%iPhone%'
}
有什么办法可以做到这一点吗?我也看不出用
case
语句如何做到这一点(至少不在where
子句中)
生成不精确匹配的查询将非常简单:
SELECT Product_ID,
Product_Name,
Product_Type,
Product_Cost
CASE Product_Name WHEN `iPhone` THEN 0 ELSE 1 END AS Match
FROM tblProducts
WHERE Product_Name LIKE '%iPhone%'
棘手的部分是仅当精确匹配不存在时才返回非精确匹配。这可以通过不存在
操作符完成:
SELECT Product_ID,
Product_Name,
Product_Type,
Product_Cost
CASE Product_Name WHEN `iPhone` THEN 0 ELSE 1 END AS Match
FROM tblProducts
WHERE Product_Name = 'iPhone' OR
(Product_Name LIKE '%iPhone%' AND
NOT EXISTS (SELECT *
FROM tblProducts
WHERE Product_Name = 'iPhone')
);