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的列的未定义数量?还是未定义行数?在这次尝试中,争吵无关紧要。你可以有几百个。