Mysql 如何基于多列键进行子选择
我正在使用一个遗留数据库,该数据库对产品使用三列键。我想选择状态为“a”或在第二个表中有匹配记录的所有产品。如果是像“id”这样的单列主键,我会这样做:Mysql 如何基于多列键进行子选择,mysql,sql,Mysql,Sql,我正在使用一个遗留数据库,该数据库对产品使用三列键。我想选择状态为“a”或在第二个表中有匹配记录的所有产品。如果是像“id”这样的单列主键,我会这样做: SELECT * FROM `product` WHERE `status` = 'A' OR `id` IN (SELECT `foreign_key` FROM `table2`) 但是,我不知道如何使用三个键执行IN子句subselect。我想我可以将键连接在一起并比较字符串,但这似乎效率极低。有没有一种方法可以在没有连
SELECT * FROM `product`
WHERE `status` = 'A'
OR `id` IN (SELECT `foreign_key` FROM `table2`)
但是,我不知道如何使用三个键执行IN子句subselect。我想我可以将键连接在一起并比较字符串,但这似乎效率极低。有没有一种方法可以在没有连接的情况下实现这一点?您可以使用联合:
SELECT *
FROM 'product'
WHERE 'status' = 'A'
UNION
SELECT *
FROM 'product'
JOIN 'table2'
ON (product.id = table2.foreign_key
AND ...)
你可以使用工会:
SELECT *
FROM 'product'
WHERE 'status' = 'A'
UNION
SELECT *
FROM 'product'
JOIN 'table2'
ON (product.id = table2.foreign_key
AND ...)
您可以将表product和table2保留在复合键上,然后status='A'或table2.id不为NULL
左[OUTER]联接可以比等效子查询更快,因为服务器可能能够更好地优化它您可以将联接表product和table2留在复合键上,然后status='A'或table2.id不为NULL 左[外部]联接可能比等效子查询快,因为服务器可能能够更好地优化它执行左联接:
SELECT p.* FROM product p
LEFT JOIN table2 t2 on p.key1 = t2.key1 and p.key2 = t2.key2 and p.key3 = t2.key3
WHERE status = 'A' OR t2.key1 IS NOT NULL
进行左连接:
SELECT p.* FROM product p
LEFT JOIN table2 t2 on p.key1 = t2.key1 and p.key2 = t2.key2 and p.key3 = t2.key3
WHERE status = 'A' OR t2.key1 IS NOT NULL
您可以在此处使用EXISTS关联子查询您可以在此处使用EXISTS关联子查询