在 MYSQL 中搜索 Concat 结果时出现问题
Problem with Concat results searching in MYSQL
您好,这是我试图获得结果的查询,但我怎样才能在该列中搜索 concat 结果?
SELECT
( SELECT GROUP_CONCAT(tp.login)
FROM tp
WHERE tp.user_id = user_extra.user_id
) as login
, users.email as email
, user_extra.fname as name
FROM user_extra
LEFT
JOIN users
ON users.id = user_extra.user_id
WHERE users.email like "%example@example.com%"
OR user_extra.fname like "%test%"
OR tp.login like "%461988%"
您不能在同一范围内引用 select
子句中定义的别名(order by
子句分开)。在 MySQL(8.0.14 或更高版本)的最新版本中,您可以为此使用 lateral
:
SELECT tp.login, u.email as email, ue.fname as name
FROM user_extra ue
LEFT JOIN users u ON u.id = ue.user_id
LEFT JOIN LATERAL (
SELECT GROUP_CONCAT(tp.login) login
FROM tp
WHERE tp.user_id = ue.user_id
) tp ON 1
WHERE
u.email like '%example@example.com%'
OR ue.fname like '%test%'
OR tp.login like '%461988%'
在早期版本中,您可以JOIN
,或者使用子查询:
SELECT *
FROM (
SELECT
(SELECT GROUP_CONCAT(tp.login) login FROM tp WHERE tp.user_id = ue.user_id) login,
u.email as email,
ue.fname as name
FROM user_extra ue
LEFT JOIN users u ON u.id = ue.user_id
) t
WHERE
email like '%sradesign.net@gmail.com%'
OR fname like '%test%'
OR login like '%461988%'
您好,这是我试图获得结果的查询,但我怎样才能在该列中搜索 concat 结果?
SELECT
( SELECT GROUP_CONCAT(tp.login)
FROM tp
WHERE tp.user_id = user_extra.user_id
) as login
, users.email as email
, user_extra.fname as name
FROM user_extra
LEFT
JOIN users
ON users.id = user_extra.user_id
WHERE users.email like "%example@example.com%"
OR user_extra.fname like "%test%"
OR tp.login like "%461988%"
您不能在同一范围内引用 select
子句中定义的别名(order by
子句分开)。在 MySQL(8.0.14 或更高版本)的最新版本中,您可以为此使用 lateral
:
SELECT tp.login, u.email as email, ue.fname as name
FROM user_extra ue
LEFT JOIN users u ON u.id = ue.user_id
LEFT JOIN LATERAL (
SELECT GROUP_CONCAT(tp.login) login
FROM tp
WHERE tp.user_id = ue.user_id
) tp ON 1
WHERE
u.email like '%example@example.com%'
OR ue.fname like '%test%'
OR tp.login like '%461988%'
在早期版本中,您可以JOIN
,或者使用子查询:
SELECT *
FROM (
SELECT
(SELECT GROUP_CONCAT(tp.login) login FROM tp WHERE tp.user_id = ue.user_id) login,
u.email as email,
ue.fname as name
FROM user_extra ue
LEFT JOIN users u ON u.id = ue.user_id
) t
WHERE
email like '%sradesign.net@gmail.com%'
OR fname like '%test%'
OR login like '%461988%'