반응형
Python SQL 다른 테이블에서 일치하지 않는 항목을 찾는 방법
다른 테이블의 불일치를 확인할 수 있도록 해결책을 찾고 있습니다.
기본적으로 테이블은 3개입니다(아래 참조).여기에서는 표 1을 참조하여 이름 또는 위치에 일치하지 않는 첫 번째 행을 식별합니다.둘 다 인식되면 다음 행으로 이동하여 확인해야 합니다.
SQL을 사용하여 이 작업을 수행하려고 시도했지만 일치하지 않는 첫 번째 행만 원하기 때문에 부드러운 솔루션을 찾을 수 없었습니다(혹은 저는 초보이기 때문에 이 작업을 수행할 수 없습니다).
SQL을 사용하여 이 작업을 수행할 수 있다고 확신합니다.
표 1.
Id Name Location
1 John Canada
2 James Brazil
3 Jim Hungary
표 2 - 인식되는 이름
Id Name
1 John
2 James
표 3 - 인식되는 위치
Id Location
1 Brazil
2 Hungary
따라서 표 1에서 Name이 표 2에서 일치하는 것을 찾을 수 없거나 Location이 표 3에서 일치하는 것을 찾을 수 없는 것을 선택합니다.
위의 예에서는 위치가 표 3에 없기 때문에 결과는 ID = 1이어야 합니다.
잘 부탁드립니다.
사용할 수 있습니다.not exists
일부 하위 항목이 행을 선택하지 않을 경우 선택하려면:
select
*
from
Table1 t1
where
not exists (
select * from Table2 t2 where t2.`Name` = t1.`Name`
) and
not exists (
select * from Table3 t3 where t3.`Location` = t1.`Location`
)
order by
t1.Id
limit 1
이 질문은 그다지 복잡한 것은 아니지만, 아직 몇 가지 문제가 진행 중이기 때문에, 같은 질문이지만, 다양한 부분을 설명하는 코멘트가 포함되어 있습니다.
select
/* I select all columns, *, for the example, but in real life scenarios
it's always better to explicitly specify which columns you need. */
*
from
/* Optionally, you can specify a short or different alias for a table (t1)
this can be helpful to make your query more readable by allowing you to explicitly
specify where a column is coming from, without cluttering the query with long names. */
Table1 t1
where
/* exists takes a sub-query, which is executed for each row of the main query.
The expression returns true if the subquery returns a row.
With not (not exists), the expression is inversed: true becomes false. */
not exists (
/* In MariaDB, backticks can be used to escape identifiers that also are
reserved words. You are allowed to use them for any identifier, but
for reserved word identifiers, they are often necessary. */
select * from Table2 t2 where t2.`Name` = t1.`Name`
)
/* Combine the two subqueries. We only want rows don't have a matching row
in sub-query one, and neither in sub-query two. */
and
not exists (
select * from Table3 t3 where t3.`Location` = t1.`Location`
)
/* Specify _some_ ordering by which you can distinguish 'first' from 'second'. */
order by
t1.Id
/* Return only 1 row (the first according to the order clause) */
limit 1
언급URL : https://stackoverflow.com/questions/53976944/python-sql-how-to-look-for-non-matches-in-other-tables
반응형
'sourcecode' 카테고리의 다른 글
String 클래스는 + 연산자를 어떻게 덮어쓰나요? (0) | 2022.09.18 |
---|---|
날짜를 지정하면 요일을 어떻게 알 수 있나요? (0) | 2022.09.18 |
Node.js 응용 프로그램을 디버깅하려면 어떻게 해야 하나요? (0) | 2022.09.18 |
fprintf, printf, sprintf의 차이? (0) | 2022.09.18 |
PHP에서 유용한 오류 메시지를 얻으려면 어떻게 해야 합니까? (0) | 2022.09.18 |