2017-12-29 26 views
0

나는 올해에 MySQL을 추가하는 것을 배우고 있습니다. 이 select 문에서 얻은 결과를 삭제하려고합니다.MySQL에서 DISTINCT를 사용하여 SELECT 결과를 DELETE 함수로 변환

select distinct * 
from films a 
inner join films b 
on trim(upper(a.titel)) = trim(upper(b.titel)) 
where a.filmID > b.filmID 

그러나 이러한 문제는 몇 가지 문제가 있습니다. 그런 이유로 코드를 테스트하는 것이 우리가 필요로하는 결과를 항상 가져 오는 것은 아닙니다. 그래서 우리는 기본적으로 맹목적으로 달리고 단지 제대로 테스트하지 못한 채 문제를 풀도록해야합니다. 우리 마감일 이후

우리가이 일을 제외한 모든 문제를 해결 내일입니다.

delete from films where (*) in (
select distinct * 
from films a 
inner join films b 
on trim(upper(a.titel)) = trim(upper(b.titel)) 
where a.filmID > b.filmID 
); 

을 그리고 지금은이 오류를 얻을 : :이 작업을 수행하여이 문제를 해결하기 위해 원

enter image description here

내 친구들은 그냥 데이터베이스에 오류가 있다고 생각합니다. 그러나 나는 그것이 사실이 아니라고 생각한다. 이 오류로

delete from films where titel in (
select distinct a.titel 
from films a 
inner join films b 
on trim(upper(a.titel)) = trim(upper(b.titel)) 
where a.filmID > b.filmID 
); 

:

은 그 때 나는이 시도

enter image description here

+1

? 그리고 '별개 *'는 모순 (morymoron)입니다. 의 – Strawberry

+1

가능한 중복 [MySQL의에 참여하기로 삭제] (https://stackoverflow.com/questions/652770/delete-with-join-in-mysql) –

+0

나는 약간 ^^ 걱정 이유 즉, 사람의 대부분 이미 과제물을 보내고 있습니다 ... –

답변

2

는 다음을 고려하십시오 :

DROP TABLE IF EXISTS films; 

CREATE TABLE films 
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY 
,title VARCHAR(50) NOT NULL 
); 

INSERT INTO films (title) VALUES 
('The Shining'), 
('Jaws'), 
('Casablanca'), 
('Bladerunner'), 
('The Shining'), 
('Casablanca'); 


SELECT * 
    FROM films x 
    JOIN films y 
    ON y.title = x.title 
WHERE y.id < x.id; 
+----+-------------+----+-------------+ 
| id | title  | id | title  | 
+----+-------------+----+-------------+ 
| 5 | The Shining | 1 | The Shining | 
| 6 | Casablanca | 3 | Casablanca | 
+----+-------------+----+-------------+ 

DELETE x FROM films x JOIN films y ON y.title = x.title WHERE y.id < x.id; 
Query OK, 2 rows affected (0.01 sec) 

SELECT * FROM films; 
+----+-------------+ 
| id | title  | 
+----+-------------+ 
| 1 | The Shining | 
| 2 | Jaws  | 
| 3 | Casablanca | 
| 4 | Bladerunner | 
+----+-------------+ 
+0

그래서 같은 : 이 영화에서 X를 삭제 x는 트림에 영화 Y 가입 (상단 (y.titel)) = 트림 (상단 (x.titel)) 여기서 x.filmID> y.filmID; 이 작동하는 것 같습니다. Thx a lot :) –

+0

글쎄, 나는 UPDATE films SET titel = TRIM (titel)을 실행할 것입니다. 대소 문자를 구분하는 데이터 정렬을 사용하는 경우 대문자 만 필요합니다. – Strawberry

0

(질문 대신에 솔루션을 게시 저자). '이 추가'무슨

delete x 
from films x 
join films y 
on trim(upper(y.titel)) = trim(upper(x.titel)) 
where x.filmID > y.filmID;