仅当成员不在另一个列表中时才返回成员列表

lmyy7pcs  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(276)

我正在尝试创建一个成员列表,如果他们不在另一个列表中。当另一个列表至少有一个成员时,查询工作(返回不在另一个列表中的成员)。但是,如果另一个列表不包含任何成员(返回null),则不返回任何值。

String selectQry = ("SELECT at_cub_details.cd_id, at_cub_details.cd_surname, at_cub_details.cd_first_name, " +
            "at_cub_details.cd_archived " +
            "FROM at_cub_details, at_account_group " + 
            "WHERE at_account_group.acc_id = ? AND at_account_group.grp_id = at_cub_details.grp_id " +
                "AND ( " +
                    " SELECT at_cub_details.cd_id " +
                          "FROM at_group, at_account_group group1, at_account_group group2, at_accounts " + 
                          "LEFT JOIN at_account_cub_association ON at_accounts.acc_id = at_account_cub_association.acc_id " +
                          "LEFT JOIN at_cub_details ON at_account_cub_association.cd_id = at_cub_details.cd_id " +
                          "WHERE (at_accounts.acc_id = ? " +
                            "AND (group1.acc_id = ?  " +
                            "AND group1.grp_id = group2.grp_id " +
                            "AND group2.acc_id = at_accounts.acc_id)) " +
                            "AND (group2.grp_id = at_group.grp_id) LIMIT 1) IS NOT NULL " +
                "AND at_cub_details.cd_id NOT IN ( " +
                                " SELECT at_cub_details.cd_id " +
                                      "FROM at_group, at_account_group group1, at_account_group group2, at_accounts " + 
                                      "LEFT JOIN at_account_cub_association ON at_accounts.acc_id = at_account_cub_association.acc_id " +
                                      "LEFT JOIN at_cub_details ON at_account_cub_association.cd_id = at_cub_details.cd_id " +
                                      "WHERE (at_accounts.acc_id = ? " +
                                        "AND (group1.acc_id = ?  " +
                                        "AND group1.grp_id = group2.grp_id " +
                                        "AND group2.acc_id = at_accounts.acc_id)) " +
                                        "AND (group2.grp_id = at_group.grp_id)) " +
            "ORDER BY at_cub_details.cd_surname, at_cub_details.cd_first_name;");

好的,为了简化第二个和第三个“select”的工作原理,第一个“select”只在第三个“select”返回一个值时工作,而不是在它返回“null”时。最初我只有第三个“选择”。然后我添加了第二个“select”来首先检查“null”。然而,这并没有纠正这个问题。所以:
这样做有效:

String selectQry = ("SELECT at_cub_details.cd_id, at_cub_details.cd_surname, at_cub_details.cd_first_name, " +
            "at_cub_details.cd_archived " +
            "FROM at_cub_details, at_account_group " + 
            "WHERE at_account_group.acc_id = ? AND at_account_group.grp_id = at_cub_details.grp_id " +
                "AND at_cub_details.cd_id NOT IN ( '20' ) " +
            "ORDER BY at_cub_details.cd_surname, at_cub_details.cd_first_name;");

这不起作用:

String selectQry = ("SELECT at_cub_details.cd_id, at_cub_details.cd_surname, at_cub_details.cd_first_name, " +
            "at_cub_details.cd_archived " +
            "FROM at_cub_details, at_account_group " + 
            "WHERE at_account_group.acc_id = ? AND at_account_group.grp_id = at_cub_details.grp_id " +
                "AND at_cub_details.cd_id NOT IN ( NULL ) " +
            "ORDER BY at_cub_details.cd_surname, at_cub_details.cd_first_name;");

至于你是否投我反对票,我真的不在乎,因为我这样做不是为了盈利和学习,因为我去(我不是一个程序员)。

lnvxswe2

lnvxswe21#

科德兰奇的人很乐于助人。答案是使用“ifnull”在null时返回0,而不是检查null。

String selectQry = ("SELECT at_cub_details.cd_id, at_cub_details.cd_surname, at_cub_details.cd_first_name, " +
                "at_cub_details.cd_archived " +
                "FROM at_cub_details, at_account_group " + 
                "WHERE at_account_group.acc_id = ? AND at_account_group.grp_id = at_cub_details.grp_id " +
                    "AND at_cub_details.cd_id NOT IN ( " +
                                    "SELECT IFNULL (at_cub_details.cd_id, 0) " +
                                          "FROM at_group, at_account_group group1, at_account_group group2, at_accounts " + 
                                          "LEFT JOIN at_account_cub_association ON at_accounts.acc_id = at_account_cub_association.acc_id " +
                                          "LEFT JOIN at_cub_details ON at_account_cub_association.cd_id = at_cub_details.cd_id " +
                                          "WHERE (at_accounts.acc_id = ? " +
                                            "AND (group1.acc_id = ?  " +
                                            "AND group1.grp_id = group2.grp_id " +
                                            "AND group2.acc_id = at_accounts.acc_id)) " +
                                            "AND (group2.grp_id = at_group.grp_id)) " +
                "ORDER BY at_cub_details.cd_surname, at_cub_details.cd_first_name;");

谨致问候,
格林

相关问题