Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在何处使用Oracle SQL?_Sql - Fatal编程技术网

如何在何处使用Oracle SQL?

如何在何处使用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

我有一个简单的SQL语句来返回产品数据。基本上,我可以输入一个项目的名称,如果该项目与exact匹配,则什么也不做,如果没有与exact请求匹配的项目,我希望在我的SQL中切换“WHERE”语句。目前看来:

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')
       );