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

时间:2018-05-21 12:35:12

标签: mysql sql database rdbms

我不是很喜欢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 字段计算总返回记录并显示在每一行中。

我希望如果此 total_number 字段包含值> 1且 parent_livestock_species_id 字段值为** null *则从查询输出中排除tis记录。

我可以使用SQL做这样的事情吗?

3 个答案:

答案 0 :(得分:1)

在MySQL中,您可以添加having total_number = 1 or parent_livestock_species_id is not null 子句:

file_path_map = {path: data for data, path in file_paths_array}

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

答案 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 , 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 子句

@Override
protected void onDraw(Canvas canvas) {
    ...
    bitmapUpdated = true;
}

答案 2 :(得分:0)

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