更新时间:2023-02-04 18:23:20
如果您追求优雅的SQL,则可以使用行构造器:
If you're after elegant SQL, you could use row constructors:
SELECT * FROM email_phone_notes WHERE (email, phone) IN (
('foo@bar.com' , '555-1212'),
('test@test.com', '888-1212')
-- etc.
);
但是,这根本不是索引友好的,也不建议在任何大的表上使用.取而代之的是,您可以将具有所需对的表具体化,然后将其与表连接:
However, that's not at all index-friendly and would not be recommended on a table of any significant size. Instead, you could materialise a table with your desired pairs and join that with your table:
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;
或者预先填充(临时)表:
Or else pre-populate a (temporary) table:
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;