MySQL-如何使用左连接和右连接来获得结果

MySQL-如何使用左连接和右连接来获得结果,mysql,Mysql,我知道aw_id、ad_id和grp_id的值(例如,aw_id=5、ad_id=46和grp_id=2) 我想显示所有at_cub_的详细信息,其中: at_cub_details.grp_id = 2 AND at_cub_details.cd_id = at_cub_awards.cd_id AND at_cub_awards.aw_id = 5 AND at_cub_awards.ca_awarded_date IS NULL OR at_cub_details.cd_id = a

我知道aw_id、ad_id和grp_id的值(例如,aw_id=5、ad_id=46和grp_id=2)

我想显示所有at_cub_的详细信息,其中:

at_cub_details.grp_id = 2 AND
at_cub_details.cd_id = at_cub_awards.cd_id AND 
at_cub_awards.aw_id = 5 AND 
at_cub_awards.ca_awarded_date IS NULL 
OR at_cub_details.cd_id = at_cub_awards.cd_id AND 
at_cub_awards.aw_id = 5 does not exist

Where at_cub_details.cd_id = at_cub_awards.cd_id AND 
at_cub_awards.aw_id = 5 AND 
at_cub_awards.ca_awarded_date = NULL does exist **then** 
at_cub_awards.ca_id = at_cub_award_date.ca_id 
AND at_cub_award_date.ad_id = 46 
AND at_cub_award_date.cad_task_completion_date IS NULL OR 
at_cub_awards.ca_id = at_cub_award_date.ca_id AND 
at_cub_award_date.ad_id = 46 does not exist
我已经尝试了各种方式的左右连接,但没有任何运气。

解决方案是:

String selectQry = ("SELECT * from ( " +
            "SELECT DISTINCT at_cub_details.cd_id as cdid, " +
                "at_cub_details.grp_id as grpid, " +
                "at_cub_details.cd_surname as surname, " +
                "at_cub_details.cd_first_name as firstName, " +
                "at_cub_details.cd_dob as dob, " +
                "at_cub_details.cd_photograph as photograph, " +
                "at_cub_details.cd_archived as archived, " +
                "at_cub_details.cd_scout_no as scoutNo " +
            "FROM at_account_group, at_cub_details " +
            "LEFT JOIN at_cub_awards ON (at_cub_details.cd_id = at_cub_awards.cd_id AND at_cub_awards.aw_id = ?) " +
            "WHERE at_cub_awards.cd_id IS NULL " +
                "AND at_cub_details.grp_id = at_account_group.grp_id " +
                "AND at_account_group.acc_id = ? " +

            "UNION " +
            "SELECT DISTINCT at_cub_details.cd_id as cdid, " +
                            "at_cub_details.grp_id as grpid, " +
                            "at_cub_details.cd_surname as surname, " +
                            "at_cub_details.cd_first_name as firstName, " +
                            "at_cub_details.cd_dob as dob, " +
                            "at_cub_details.cd_photograph as photograph, " +
                            "at_cub_details.cd_archived as archived, " +
                            "at_cub_details.cd_scout_no as scoutNo " +
            "FROM at_account_group, at_cub_details, at_cub_awards, at_cub_award_date " +
            "WHERE at_cub_details.grp_id = at_account_group.grp_id " +
                "AND at_account_group.acc_id = ? " +
                "AND at_cub_awards.cd_id  = at_cub_details.cd_id " + 
                "AND (at_cub_awards.aw_id = ? AND at_cub_awards.ca_awarded_date IS NULL) " +
                "AND (at_cub_awards.ca_id = at_cub_award_date. ca_id " +
                        "AND at_cub_award_date.cad_task_completion_date IS NULL " +
                        "AND at_cub_award_date.ad_id = ?) " +

            "UNION " +
            "SELECT DISTINCT at_cub_details.cd_id as cdid, " +
                            "at_cub_details.grp_id as grpid, " +
                            "at_cub_details.cd_surname as surname, " + 
                            "at_cub_details.cd_first_name as firstName, " +
                            "at_cub_details.cd_dob as dob, " +
                            "at_cub_details.cd_photograph as photograph, " +
                            "at_cub_details.cd_archived as archived, " +
                            "at_cub_details.cd_scout_no as scoutNo " +
            "FROM at_account_group, at_cub_details, at_cub_awards " +
            "LEFT JOIN at_cub_award_date ON (at_cub_awards.ca_id = at_cub_award_date.ca_id) " +
            "WHERE at_cub_award_date.ca_id IS NULL " +
                "AND at_cub_awards.ca_awarded_date IS NULL AND at_cub_awards.aw_id = ? " +
                "AND at_cub_details.grp_id = at_account_group.grp_id " +
                "AND at_account_group.acc_id = ? " + 
                "AND at_cub_awards.cd_id  = at_cub_details.cd_id " +

            " ) a " +
            "ORDER BY surname, firstName;");

您能展示一下您的数据结构以及一些示例数据吗?用这种方法很难弄清楚情况。