mysql选择。如果WHERE中的值不存在,则根据WHERE中的另一个(值)选择

mysql选择。如果WHERE中的值不存在,则根据WHERE中的另一个(值)选择,mysql,Mysql,我有这样的桌子 我有两个变量/值,例如FLASH和LCD 我想要:如果name列中不存在FLASH,则选择。。。其中columnname='LCD'。如果存在FLASH,则不基于LCD 我写了这样的疑问 SELECT t1.name AS lev1, t1.url AS url1 FROM CategoryForTest AS t1 LEFT JOIN CategoryForTest AS t2 ON t2.parent = t1.category_id LEFT JOIN Catego

我有这样的桌子

我有两个变量/值,例如
FLASH
LCD

我想要:如果
name
列中不存在
FLASH
,则
选择。。。其中
column
name='LCD'
。如果存在
FLASH
,则不基于
LCD

我写了这样的疑问

SELECT 

t1.name AS lev1, t1.url AS url1

FROM CategoryForTest AS t1
LEFT JOIN CategoryForTest AS t2 ON t2.parent = t1.category_id
LEFT JOIN CategoryForTest AS t3 ON t3.parent = t2.category_id
LEFT JOIN CategoryForTest AS t4 ON t4.parent = t3.category_id

WHERE exists (
SELECT name
from CategoryForTest
WHERE t4.name = 'FLASH'
)

UNION ALL

SELECT 

t1.name AS lev1, t1.url AS url1

FROM CategoryForTest AS t1
LEFT JOIN CategoryForTest AS t2 ON t2.parent = t1.category_id
LEFT JOIN CategoryForTest AS t3 ON t3.parent = t2.category_id
LEFT JOIN CategoryForTest AS t4 ON t4.parent = t3.category_id

WHERE not exists (
SELECT name
from CategoryForTest
WHERE t4.name = 'FLASH'
)
AND t2.name = 'LCD'
但我明白了

Array
(
[0] => Array
    (
        [lev1] => ELECTRONICS
        [url1] => url-electronics
    )

[1] => Array
    (
        [lev1] => TELEVISIONS
        [url1] => url-televisions
    )

)

希望只看到
[0]=>数组

基于此找到解决方案

如果
FLASH
存在,则基于
FLASH
获取数据。如果
FLASH
不存在,则基于
LCD

进行提取,这可能会对您有所帮助

(
   SELECT 

     t1.name AS lev1, t1.url AS url1

   FROM test AS t1
     LEFT JOIN test AS t2 ON t2.parent = t1.categ_id
     LEFT JOIN test AS t3 ON t3.parent = t2.categ_id
     LEFT JOIN test AS t4 ON t4.parent = t3.categ_id

   WHERE not exists (
       SELECT 

         t1.name AS lev1, t1.url AS url1

       FROM test AS t1
         LEFT JOIN test AS t2 ON t2.parent = t1.categ_id
         LEFT JOIN test AS t3 ON t3.parent = t2.categ_id
         LEFT JOIN test AS t4 ON t4.parent = t3.categ_id

      WHERE exists (
         SELECT name
         from test
         WHERE t4.name = 'FLASH'
      )
   )
   AND t2.name = 'LCD'
 GROUP BY t1.categ_id
)
UNION ALL
(
   SELECT 

     t1.name AS lev1, t1.url AS url1

   FROM test AS t1
     LEFT JOIN test AS t2 ON t2.parent = t1.categ_id
     LEFT JOIN test AS t3 ON t3.parent = t2.categ_id
     LEFT JOIN test AS t4 ON t4.parent = t3.categ_id

   WHERE exists (
     SELECT name
     from test
     WHERE t4.name = 'FLASH'
   )
)

fidle is

如何使用两个单独的查询,首先用于获取名称为FLASH的查询,然后如果未找到任何结果,则选择名称为LCD的查询。两个单独的查询将使用额外的资源?不确定它对性能的影响有多大(比较两个或一个查询)。我可能还需要一个查询来从另一个表获取产品。因此,只有当我将
FLASH
更改为
FLASH1
时,才会出现3个查询。我使用
LCD
@user2118559获得一个长列表,您想忽略1?我试图更改为
FLASH1
(mysql中不存在的值,用于执行基于
LCD
的查询)并查看多个
LCD
,但只需要查看一个(与mysql中一样,只有一个
LCD
)@user2118559表中是否有任何唯一字段可用于group by()?因此,请在group by中使用category_id。
(
   SELECT 

     t1.name AS lev1, t1.url AS url1

   FROM test AS t1
     LEFT JOIN test AS t2 ON t2.parent = t1.categ_id
     LEFT JOIN test AS t3 ON t3.parent = t2.categ_id
     LEFT JOIN test AS t4 ON t4.parent = t3.categ_id

   WHERE not exists (
       SELECT 

         t1.name AS lev1, t1.url AS url1

       FROM test AS t1
         LEFT JOIN test AS t2 ON t2.parent = t1.categ_id
         LEFT JOIN test AS t3 ON t3.parent = t2.categ_id
         LEFT JOIN test AS t4 ON t4.parent = t3.categ_id

      WHERE exists (
         SELECT name
         from test
         WHERE t4.name = 'FLASH'
      )
   )
   AND t2.name = 'LCD'
 GROUP BY t1.categ_id
)
UNION ALL
(
   SELECT 

     t1.name AS lev1, t1.url AS url1

   FROM test AS t1
     LEFT JOIN test AS t2 ON t2.parent = t1.categ_id
     LEFT JOIN test AS t3 ON t3.parent = t2.categ_id
     LEFT JOIN test AS t4 ON t4.parent = t3.categ_id

   WHERE exists (
     SELECT name
     from test
     WHERE t4.name = 'FLASH'
   )
)