mysql - 如果值在另一个表中,则选择某些列

标签 mysql sql

我有一个语句可以按照我想要的方式工作,但是它是否是正确的方法,因为我有很多 IF 语句并且想知道它是否对性能有影响,或者我应该采用不同的方法来实现最佳实践。这是通过阅读文档创建的,所以我可能已经绕过它了。

SELECT c.id, c.first_name, c.last_name, 
IF( c.id IN  (SELECT client_id  FROM bookings)  AND '1' IN (SELECT practitioner_id FROM bookings) , c.address1, NULL) as address1,
IF( c.id IN  (SELECT client_id  FROM bookings)  AND '1' IN (SELECT practitioner_id FROM bookings) , c.address2, NULL) as address2,  
IF( c.id IN  (SELECT client_id  FROM bookings)  AND '1' IN (SELECT practitioner_id FROM bookings) , c.town, NULL) as town, 
IF( c.id IN  (SELECT client_id  FROM bookings)  AND '1' IN (SELECT practitioner_id FROM bookings) , c.county, NULL) as county,  
IF( c.id IN  (SELECT client_id  FROM bookings)  AND '1' IN (SELECT practitioner_id FROM bookings) , c.postcode, NULL) as postcode,  
IF( c.id IN  (SELECT client_id  FROM bookings)  AND '1' IN (SELECT practitioner_id FROM bookings) , c.email, NULL) as email,  
IF( c.id IN  (SELECT client_id  FROM bookings)  AND '1' IN (SELECT practitioner_id FROM bookings) , c.dob, NULL) as dob 
FROM clients c 

最佳答案

你应该采取不同的方法。

我猜测当相应预订的从业者为 1 时,您需要额外的列。我不是 100% 确定,因为您的查询略有不同。

但总体思路是这样的:

SELECT c.id, c.first_name, c.last_name,
       (CASE WHEN b.client_id IS NOT NULL THEN c.address1 END) as address1,
       . . .
FROM clients c LEFT JOIN
     bookings b
     ON c.id = b.client_id AND b.practitioner_id = 1;

填写。 . . 包含您想要的其他列。

关于mysql - 如果值在另一个表中,则选择某些列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43588177/

相关文章:

mysql - SQL 仅选择列上具有最大值的行

MySQL & 嵌套集 : slow JOIN (not using index)

sql - 加入一对多并检索单个结果

带有准备好的语句的 SQL 注入(inject)?

mysql - 连接表的SQL语句

php - 在 PHP/HTML 中格式化 MySQL 查询

mysql - (Amazon Linux) MySQL 在 EC2 重启时停止工作

MySQL Group by a field based on another field maximum value of another field IN THE GROUP(不在表中)

mysql - 将 SQL 查询转换为 CakePHP 3.0

MySql Insert ON Duplicate Key 并选择不起作用