MySQL唯一行

MySQL唯一行,mysql,sql,database,select,Mysql,Sql,Database,Select,我需要一个没有重复的独特的行,我想找到一对演员最大的共同出现。 例如: 我的输出: +----------+-----------+ |actor1_id | actor2_id | +----------+-----------+ | 27 | 60 | | 60 | 27 | +-------

我需要一个没有重复的独特的行,我想找到一对演员最大的共同出现。 例如:

我的输出:

            +----------+-----------+
            |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语句将两列合并为一列,然后对它们进行不同的选择。比如:

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      | 
+---------+

现在,您可以在派生表上使用联接。

您可以使用UNION语句将两列合并为一列,然后对它们进行不同的选择。比如:

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      | 
+---------+

现在,您可以在派生表上使用联接。

只需使用大小写表达式在两列之间交换值即可。然后找到不同的行

质疑


只需使用大小写表达式在两列之间交换值。然后找到不同的行

质疑

这可以通过使用notexists来实现,如下所示-

SELECT *
  FROM film_actor t1
 WHERE NOT EXISTS (SELECT 1
          FROM film_actor t2
         WHERE t1.actor2_id = t2.actor1_id
           AND t1.actor1_id = t2.actor2_id
           AND t1.actor1_id > t1.actor2_id)
这可以通过使用notexists来实现,如下所示-

SELECT *
  FROM film_actor t1
 WHERE NOT EXISTS (SELECT 1
          FROM film_actor t2
         WHERE t1.actor2_id = t2.actor1_id
           AND t1.actor1_id = t2.actor2_id
           AND t1.actor1_id > t1.actor2_id)

我只能想到一个办法: 在表中创建另一个字段,并将两个ID以相同的顺序存储在该字段中,先小后大。所以你的桌子看起来像这样

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

并使用actor_id行创建SELECT DISTINCT语句。

我只能想到一种方法: 在表中创建另一个字段,并将两个ID以相同的顺序存储在该字段中,先小后大。所以你的桌子看起来像这样

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

并使用actor_id行创建SELECT DISTINCT语句。

请检查此项,通过此查询可以解决您的问题

SELECT test_status, system_generated FROM test_details WHERE test_status <= system_generated 
UNION 
SELECT system_generated, test_status FROM test_details WHERE system_generated < test_status

请检查此项,希望通过此查询解决您的问题

SELECT test_status, system_generated FROM test_details WHERE test_status <= system_generated 
UNION 
SELECT system_generated, test_status FROM test_details WHERE system_generated < test_status

只需使用只需使用No也许我会有不止两个,所以我必须得到两列Actor你的意思是你可以有actor1\u id、actor2\u id、actor3\u id等。?具有参与者ID的列的未定义数量?还是未定义行数?在这次尝试中,争吵无关紧要。你可以有几百个。不,也许我会有更多的,所以我必须有两列Actor你的意思是你可以有actor1\u id,actor2\u id,actor3\u id等等。?具有参与者ID的列的未定义数量?还是未定义行数?在这次尝试中,争吵无关紧要。你可以有几百个。