MySQL中的条件连接查询
我有两张mysql表 用户: 顾客MySQL中的条件连接查询,mysql,laravel-5.7,Mysql,Laravel 5.7,我有两张mysql表 用户: 顾客 |-------------------------| | id | name | user_id | |-------------------------| | 1 | Sam | 2 | |-------------------------| 如果user.type是'a'或's',则其名称位于用户表中的管理员用户 如果user.type是'r'并且ruser\u type是'c',那么它的常规用户在customer表中
|-------------------------|
| id | name | user_id |
|-------------------------|
| 1 | Sam | 2 |
|-------------------------|
如果user.type
是'a'或's',则其名称位于用户表中的管理员用户
如果user.type
是'r'并且ruser\u type
是'c',那么它的常规用户在customer表中有一个关系,其中customer.user\u id=user.id
我想要一个运行条件联接的查询。
如果user.type
是'a'或's',则将从用户表中提取名称
如果user.type
是'r'并且ruser\u type
是'c',那么将使用连接条件customer.user\u id=user.id
从customer表中获取名称
为此,我编写了如下查询:-
SELECT users.fname as adminFname, customers.fname as customerFname, users.type FROM users
LEFT JOIN customers ON (customers.user_id = users.id AND
(
(users.type = 'r' AND users.ruser_type = 'c')
OR users.type = 'a'
OR users.type = 's'
)
)
WHERE users.id = 1
是否有可能进一步优化查询
另外,我如何使用Laravel eloquent编写此查询?FWIW,我发现这稍微更容易阅读
SELECT u.fname adminFname
, c.fname customerFname
, u.type
FROM users u
LEFT
JOIN customers c
ON c.user_id = u.id
WHERE u.id = 1
AND (
(u.type = 'r' AND u.ruser_type = 'c')
OR (u.type IN('a','s'))
)
我已经写了两个sql查询,希望对您有所帮助
SELECT CASE CU.type WHEN 'a' OR 's' THEN CU.name END AS name,
CASE WHEN CU.type = 'r' AND CU.ruser_type = 'c' THEN CR.name END AS cust_name, CU.type
FROM
user AS CU
LEFT JOIN customer AS CR ON CR.user_id = CU.id
这样你会得到这样的结果
name cust_name type
Sam r
Admin a
SELECT CASE WHEN CU.type = 'a' OR 's' THEN CU.name ELSE CR.name END AS name, CU.type
FROM
user AS CU
LEFT JOIN customer AS CR ON CR.user_id = CU.id
我写了另一个这样的问题
name cust_name type
Sam r
Admin a
SELECT CASE WHEN CU.type = 'a' OR 's' THEN CU.name ELSE CR.name END AS name, CU.type
FROM
user AS CU
LEFT JOIN customer AS CR ON CR.user_id = CU.id
在这里你会得到这样的结果
name type
Sam r
Admin a
数据库文件链接
这将为所有用户提供所需的结果:
SELECT u.fname adminFname
, c.fname customerFname
, u.type
FROM users u
LEFT JOIN customers c
ON (u.type = 'r' AND u.ruser_type = 'c' AND c.user_id = u.id)
根据需要添加where条件
您甚至可以进一步简化它,以在输出中获得通用的firstName列:
SELECT COALESCE(u.fname, c.fname) firstName, u.type
FROM users u
LEFT JOIN customers c
ON (u.type = 'r' AND u.ruser_type = 'c' AND c.user_id = u.id)
懒散的方法是
联合两个查询的结果。一个用于管理员,一个用于客户。在那里可以找到另一个解决方案:除了为所有相关表显示CREATE TABLE语句外,有关查询优化的问题始终需要对给定查询进行解释。您可以在两个查询中使用带id的where条件来获得id相关的结果。