Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何使用联接从表中搜索?_Mysql_Sql_Inner Join_Psql - Fatal编程技术网

Mysql 如何使用联接从表中搜索?

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

因此,我有以下三个表格:

成员->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', '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尝试更改条件,无论您希望更改什么。