Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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
如何使用MySql从查询输出中排除记录(基于某些特定条件)?_Mysql_Sql_Database_Rdbms - Fatal编程技术网

如何使用MySql从查询输出中排除记录(基于某些特定条件)?

如何使用MySql从查询输出中排除记录(基于某些特定条件)?,mysql,sql,database,rdbms,Mysql,Sql,Database,Rdbms,我不太喜欢SQL,我有以下问题:如果验证了特定条件,我必须从查询输出中排除特定记录 我的查询可以返回0、1、>1条记录: SELECT LS.id AS livestock_id, LS.parent_livestock_species_id

我不太喜欢SQL,我有以下问题:如果验证了特定条件,我必须从查询输出中排除特定记录

我的查询可以返回0、1、>1条记录:

SELECT
    LS.id                                                                                                       AS livestock_id,
    LS.parent_livestock_species_id                                                                              AS parent_livestock_species_id,
    LS.livestock_species_name_en                                                                                AS livestock_species_name_en,
    IFNULL(LSN.livestock_species_name, LS.livestock_species_name_en)                                            AS livestock_species_name,        
    LSN.description                                                                                             AS description,
    LS.image_link                                                                                               AS image_link,
    (
        select count(*) from LivestockSpecies ls2 where ls2.id = 1 or ls2.parent_livestock_species_id = 1
    ) as total_number
FROM LivestockSpecies                                                                                          AS LS
LEFT JOIN LivestockSpeciesName                                                                                 AS LSN
      ON LSN.livestock_species_id = LS.id AND LSN.language_id = 1
WHERE
    LS.id = 1
OR
    LS.parent_livestock_species_id = 1
total_number字段统计返回的记录总数,并显示在每一行中

我想知道,如果这个总数字段包含一个大于1的值,并且如果父项牲畜物种id字段值为**null*则从查询输出中排除该记录


我可以使用SQL执行类似操作吗?

在MySQL中,可以添加一个
having
子句:

having total_number = 1 or parent_livestock_species_id is not null

这回答了你的具体问题。可能有更合适的方法来完成你真正想完成的事情。

添加一个
HAVING
子句

SELECT
          LS.id                                                            AS livestock_id
        , LS.parent_livestock_species_id                                   AS parent_livestock_species_id
        , LS.livestock_species_name_en                                     AS livestock_species_name_en
        , IsNULL(LSN.livestock_species_name, LS.livestock_species_name_en) AS livestock_species_name
        , LSN.description                                                  AS description
        , LS.image_link                                                    AS image_link
        , (
                 select
                        count(*)
                 from
                        LivestockSpecies ls2
                 where
                        ls2.id                             = 1
                        or ls2.parent_livestock_species_id = 1
          )
          as total_number
FROM
          LivestockSpecies AS LS
          LEFT JOIN
                    LivestockSpeciesName AS LSN
                    ON
                              LSN.livestock_species_id = LS.id
                              AND LSN.language_id      = 1
WHERE
          LS.id                             = 1
          OR LS.parent_livestock_species_id = 1

GROUP BY
          LS.id
        , LS.parent_livestock_species_id
        , LS.livestock_species_name_en
        , IsNULL(LSN.livestock_species_name, LS.livestock_species_name_en)
        , LSN.description
        , LS.image_link

HAVING
          (
                 select
                        count(*)
                 from
                        LivestockSpecies ls2
                 where
                        ls2.id                             = 1
                        or ls2.parent_livestock_species_id = 1
          )
          > 1

查询中使用的表别名从未定义。@jarlh您是什么意思?从LivestockSpecies LS…@jarlh他们是,您只需向右滚动即可,因为格式很糟糕:D@B3S,我很高兴你找到了它们!
SELECT
    LS.id AS livestock_id,
    LS.parent_livestock_species_id AS parent_livestock_species_id,
    LS.livestock_species_name_en AS livestock_species_name_en,
    IFNULL(LSN.livestock_species_name, LS.livestock_species_name_en) AS livestock_species_name,        
    LSN.description AS description,
    LS.image_link AS image_link,
    ls2.total_number as total_number
FROM LivestockSpecies AS LS
INNER JOIN (
   SELECT count(*) AS total_number 
   FROM LivestockSpecies ls2 
   WHERE ls2.id = 1 OR ls2.parent_livestock_species_id = 1
    ) ls2
  ON 1=1 AND ls2.total_number>0
LEFT JOIN LivestockSpeciesName AS LSN
      ON LSN.livestock_species_id = LS.id AND LSN.language_id = 1
WHERE
    LS.id = 1