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