我正在尝试创建一个成员列表,如果他们不在另一个列表中。当另一个列表至少有一个成员时,查询工作(返回不在另一个列表中的成员)。但是,如果另一个列表不包含任何成员(返回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;");
至于你是否投我反对票,我真的不在乎,因为我这样做不是为了盈利和学习,因为我去(我不是一个程序员)。
1条答案
按热度按时间lnvxswe21#
科德兰奇的人很乐于助人。答案是使用“ifnull”在null时返回0,而不是检查null。
谨致问候,
格林