MySQL选择唯一的名称配对

时间:2010-08-05 21:18:23

标签: sql mysql

我遇到了mysql查询的问题。我希望得到一个独特的名称,这些名称共享相同的tenant_group_id数字。您需要知道的是,每个租户都有一个独特的individual_tenant_id,最多两个租户共享同一个tenant_group_id。

   SELECT t1.first_name, t2.first_name  
     FROM individualtenant t1  
LEFT JOIN individualtenant t2 ON t1.tenant_group_id = t2.tenant_group_id
                             AND t1.individual_tenant_id != t2.individual_tenant_id

现在这给了我一对但两种方式,例如,它会返回“John”,“Melissa”和“Melissa”,“John”,但我只需要一个独特的配对。

编辑:如果个人没有合作伙伴,我需要在第二列中使用NULL。

3 个答案:

答案 0 :(得分:1)

尝试:

SELECT t1.first_name, t2.first_name
FROM individualtenant t1
LEFT JOIN individualtenant t2
ON t1.tenant_group_id = t2.tenant_group_id 
WHERE t1.individual_tenant_id < t2.individual_tenant_id 
    or t2.individual_tenant_id is null;

答案 1 :(得分:0)

使用LEFT JOIN执行此操作,其中NULL可以是“没有第二个租户”或“先前订购租户时匹配”可能非常棘手,我不知道如何处理这些。但是,如果这是您需要的所有数据,并且不需要从其他表中获取更多数据,我们可能会作弊(这将是N值的单独列表,1或更多):

SELECT GROUP_CONCAT(first_name)
FROM individualtenant
GROUP BY tenant_group_id;

另一个又脏又脏的骗子(只有1或2个租户):

SELECT MIN(first_name), IF(COUNt(*) > 1,MAX(first_name),NULL)
FROM individualtenant
GROUP BY tenant_group_id;

答案 2 :(得分:0)

这是你寻求的吗?

SELECT
t1.first_name AS 'first_tenant',
t2.first_name AS 'second_tenant'
FROM
individualtenant t1,
individualtenant t2
WHERE
    t1.tenant_group_id = t2.tenant_group_id
AND t1.individual_tenant_id < t2.individual_tenant_id
UNION
SELECT
t1.first_name,
"No Match"
FROM
individualtenant t1
WHERE NOT EXISTS (
SELECT *
FROM individualtenant t2
WHERE
    t2.individual_tenant_id <> t1.individual_tenant_id
AND t2.tenant_group_id = t1.tenant_group_id
)