MySQL 唯一行

标签 mysql sql database select

我需要一个没有重复的唯一行,我想找到相互出现次数最多的情侣(一对 Actor )。 例如:

我的输出:

            +----------+-----------+
            |actor1_id | actor2_id | 
            +----------+-----------+
            | 27       |    60     | 
            | 60       |    27     | 
            +----------+-----------+

我需要:

            +----------+-----------+
            |actor1_id | actor2_id | 
            +----------+-----------+
            | 27       |    60     | 
            +----------+-----------+

这是代码:

SELECT T3.actor1_id ,T3.actor2_id 
FROM    actor,
        (SELECT T1.actor_id AS actor1_id , T2.actor_id AS actor2_id, COUNT(T1.film_id) AS mutual_films
        FROM(
             SELECT film_actor.film_id AS film_id , film_actor.actor_id AS actor_id
             FROM film_actor) AS T1 ,
             (
             SELECT film_actor.film_id AS film_id , film_actor.actor_id AS actor_id
             FROM film_actor) AS T2
        WHERE T1.film_id = T2.film_id AND T1.actor_id != T2.actor_id 
        GROUP BY T1.actor_id , T2.actor_id) AS T3

WHERE T3.mutual_films = 
                        (SELECT MAX(T3.mutual_films) AS max_mutual
                        FROM
                                (SELECT T1.actor_id AS actor1_id , T2.actor_id AS actor2_id, COUNT(T1.film_id) AS mutual_films
                                FROM(
                                     SELECT film_actor.film_id AS film_id , film_actor.actor_id AS actor_id
                                     FROM film_actor) AS T1 ,
                                     (
                                     SELECT film_actor.film_id AS film_id , film_actor.actor_id AS actor_id
                                     FROM film_actor) AS T2
                                WHERE T1.film_id = T2.film_id AND T1.actor_id != T2.actor_id 
                                GROUP BY T1.actor_id , T2.actor_id) AS T3)

AND T3.actor1_id != T3.actor2_id
GROUP BY T3.actor1_id , T3.actor2_id

最佳答案

您可以使用 UNION 语句将 2 列合并为一列,然后对它们进行 DISTINCT SELECT。像这样的东西:

SELECT DISTINCT comb.actor_id FROM (
    SELECT s1.actor1_id AS actor_id FROM source_table AS s1
    UNION
    SELECT s2.actor2_id AS actor_id FROM source_table AS s2
) AS comb

会导致

+---------+
|actor_id |
+---------+
| 27      | 
| 60      | 
+---------+

现在您可以在派生表上使用 JOIN。

关于MySQL 唯一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40972315/

相关文章:

sql-server-2005 - SQL选择: Using CTE as dataset for IN clause - syntax error

MySQL 查询。无法获得它

c# - 从 foreach 循环手动填充 datagrad

MySQL 创建连接两个完整表的 View

C# SQL/Linq/Entity Framework 计算来自大数据源的多列的列总计

php - 如何使子表访问另一个表 laravel

mysql - 在提交所有其他事务之前,PDO 事务是否会阻塞?

mysql - 在mysql中将初始总和设置为零

php - 如何使用php在mysql数据库中插入特定字符

SQLGrammer异常 : could not execute statement