반응형
다음과 같은 email_phone_notes
테이블이 있다고 가정 해 보겠습니다.
+-----------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+--------------+------+-----+---------+-------+
| email | varchar | NO | PRI | NULL | |
| phone | varchar | NO | PRI | NULL | |
| notes | text | NO | | 0 | |
+-----------------------+--------------+------+-----+---------+-------+
따라서 각 이메일 / 전화 조합은 고유하지만 전화 번호가 다른 여러 이메일 주소를 가질 수 있으며 그 반대의 경우도 마찬가지입니다. 이것은 약간 인위적이지만 내 시나리오를 반영합니다.
다음과 같은 쿼리를 수행하고 싶습니다.
SELECT * FROM email_phone_notes WHERE email = 'foo@bar.com' AND phone = '555-1212';
하지만 한 번에 여러 쌍을 수행하고 싶으므로 여러 SELECT
쿼리를 만들 필요가 없습니다. 요청하지 않은 잘못된 전화 / 이메일 조합을 반환하고 싶지 않기 때문에 쌍을 함께 유지하는 것도 중요합니다.
이런 식으로 할 수는 있지만 수백 개의 값이있을 수 있으므로 쿼리가 정말 길어질 것입니다.
SELECT * FROM email_phone_notes WHERE (
(email='foo@bar.com' && phone='555-1212') ||
(email='test@test.com' && phone='888-1212') ||
...
더 우아한 해결책이 있습니까, 아니면 이것을 고수해야합니까? 감사!
해결 방법
우아한 SQL을 원한다면 행 생성자를 사용할 수 있습니다.
SELECT * FROM email_phone_notes WHERE (email, phone) IN (
('foo@bar.com' , '555-1212'),
('test@test.com', '888-1212')
-- etc.
);
그러나 이는 색인 친화적이지 않으며 중요한 크기의 테이블에는 권장되지 않습니다. 대신 원하는 쌍으로 테이블을 구체화하고 테이블과 조인 할 수 있습니다.
SELECT * FROM email_phone_notes NATURAL JOIN (
SELECT 'foo@bar.com' AS email, '555-1212' AS phone
UNION ALL
SELECT 'test@test.com', '888-1212'
-- etc.
) t;
또는 (임시) 테이블을 미리 채 웁니다.
CREATE TEMPORARY TABLE foo (PRIMARY KEY (email, phone)) Engine=MEMORY
SELECT email, phone FROM email_phone_notes WHERE FALSE
;
INSERT INTO foo
(email, phone)
VALUES
('foo@bar.com' , '555-1212'),
('test@test.com', '888-1212')
-- etc.
;
SELECT * FROM email_phone_notes NATURAL JOIN foo;
참조 페이지 https://stackoverflow.com/questions/13426203
반응형
'MySql' 카테고리의 다른 글
MySQL Visual Studios C # 용 PHPMyAdmin (0) | 2021.01.20 |
---|---|
MySQL (MySQL) SQL 오류 : 오류 1054 (42S22) : 'field list'의 알 수없는 열 '<Column Name>' (0) | 2021.01.20 |
MySQL Workbench로 MySQL을 자동으로 백업하는 방법 (0) | 2021.01.20 |
MySQL Java, 현재 데이터베이스를 다른 데이터베이스로 변경하는 방법은 무엇입니까? (0) | 2021.01.20 |
MySQL php mysql SET NAMES 'utf8'COLLATE 'utf8_unicode_ci'가 mysqli에서 작동하지 않습니다. (0) | 2021.01.20 |
댓글