Mysql 如何使用联接从表中搜索?
因此,我有以下三个表格: 成员->id、用户id、帐户id 帐户->id,名称 用户->id、姓氏、姓氏、电子邮件Mysql 如何使用联接从表中搜索?,mysql,sql,inner-join,psql,Mysql,Sql,Inner Join,Psql,因此,我有以下三个表格: 成员->id、用户id、帐户id 帐户->id,名称 用户->id、姓氏、姓氏、电子邮件 INSERT INTO `account` (`id`, `name`) VALUES ('1', 'xyz company'), ('2', 'abc company'); INSERT INTO `users` (`id`, `email`, `firstName`, `lastName`) VALUES ('1', 'abc@gmail.com', 'earth', 'fl
INSERT INTO `account` (`id`, `name`) VALUES
('1', 'xyz company'),
('2', 'abc company');
INSERT INTO `users` (`id`, `email`, `firstName`, `lastName`) VALUES
('1', 'abc@gmail.com', 'earth', 'flat'),
('2', '1@gmail.com', 'One hundred', 'pin'),
('3', '2@gmail.com', 'bull', 'horn'),
('4', '3@gmail.com', 'ball', 'yellow');
INSERT INTO `members` (`id`, `userId`, `accountId`) VALUES
('1', '1', '1'),
('2', '1', '2'),
('3', '2', '1');
SELECT
m.id,
m.accountId,
(
SELECT
JSON_BUILD_OBJECT(
'userId', u.id,
'firstName', u.firstName,
'lastName', u.lastName,
'email', u.email
)
FROM user
WHERE user.id = m.userId
) AS user
FROM users AS u
INNER JOIN members m ON m.userId = u.id
WHERE am.accountId = 1
GROUP BY m.id, u.id
上面的sql为我提供了正确的数据数量,如下所示
('accountId', 'email', 'firstName', 'lastName')
('1', 'abc@gmail.com', 'earth', 'flat')
('1', '1@gmail.com', 'One hundred', 'pin')
但是,当我从同一个表中搜索用户时,它也会从accountId
中提供数据,而不是从accountId
1中提供数据
SELECT
m.id,
m.accountId,
(
SELECT
JSON_BUILD_OBJECT(
'userId', u.id,
'firstName', u.firstName,
'lastName', u.lastName,
'email', u.email
)
FROM user
WHERE user.id = m.userId
) AS user
FROM users AS u
INNER JOIN members m ON m.userId = u.id
WHERE am.accountId = 1,
OR LOWER(u.first_name) LIKE LOWER('%gma%')
OR LOWER(u.last_name) LIKE LOWER('%gma%')
OR LOWER(u.email) LIKE LOWER('%gma%')
GROUP BY m.id, u.id
这给了我全部四个数据:
('accountId', 'email', 'firstName', 'lastName')
('1', 'abc@gmail.com', 'earth', 'flat'),
('2', 'abc@gmail.com', 'earth', 'flat'),
('1', '1@gmail.com', 'One hundred', 'pin')
结果应仅从accountID
1显示,但由于名称中存在匹配项,因此其结果比预期的要多
上面的查询将
LIKE
与用户匹配,并返回除accountId
1之外的其他成员,这是真的,但是我如何编写查询,以便从accountId
列出成员,并且还可以通过用户名、电子邮件在用户表中搜索成员。请保持简单,也许类似这样
SELECT
m.id, m.accountId,
u.id, u.firstName, u.lastName,
json_build_object('userId', u.id, 'firstName', u.firstName, 'lastName', u.lastName, 'email', u.email) as userobject,
a.id as account_id,
a.name as accountname
FROM
users AS u
LEFT JOIN members m ON m.userId = u.id -- user and member
LEFT JOIN account as a ON a.id = m.accountId -- connect to account from member
WHERE
(
u.firstName like '%gma%'
0R
u.lastName LIKE '%gma%'
OR
u.email LIKE '%gma%'
)
and am.accountId = 1
共享一些示例数据。顺便问一下,函数
json\u build\u object
的作用是什么?预期结果集您使用的是什么数据库管理系统--Postgres
或MySQL
?您已经标记了mysql
和psql
@whatsinaname。我不明白你搜索的规则。如果您只想搜索帐户id,为什么要在其他字段上进行比较?你的问题不清楚。上面的问题没有给我结果。该表是这样的,可能有不属于members表的用户,但我只想显示那些属于members表且accountId=1的用户,并且能够搜索名称、电子邮件、etci修改我的帖子,尝试查看是否有效:)@whatsinaname尝试更改条件,无论您希望更改什么。