【问题标题】:combine two rows from one table together based upon join to a second table in MySQL根据连接到 MySQL 中的第二个表,将一个表中的两行组合在一起
【发布时间】:2017-08-01 22:48:12
【问题描述】:

您好,我在 MySQL 中有两个表。第一个表称为 users,它有一个与表 2 相关的列 ID,称为 family。族表有两列,familyID 和 userID。基本上我想要做的是连接用户表中familyID相同的名字列。

因此,如果 John(userID 1) 和 Jane(userID 2) 的 familyID 为 123,则返回结果为“John and Jane”。

这是否可以通过 SQL 实现,还是我需要另一种编程语言(如 C#)并进行逻辑检查?

更新信息: 用户表:

/栏目信息/

字段类型键
----------------- ----------- ------
id int(11) PRI
用户名 varchar(30)
fName varchar(50)
lName varchar(50)

家庭表:

/栏目信息/

字段类型归类空键


ID int(11) (NULL) NO MUL
userID int(11) (NULL) YES MUL

/索引信息/

Table Non_unique Key_name Seq_in_index Column_name


family 1 familyUser 1 用户 ID
家庭 1 familyID 1 ID

我尝试了几种连接,甚至是自连接,但它们中的大多数返回的数据并不是我想要的,因为它重复了所有名字的连接。

如果您需要任何其他信息,请告诉我。

【问题讨论】:

标签: mysql


【解决方案1】:

借助我能够找到的其他一些帖子here 并进行了一些调整,我能够弄清楚这一点。

这是我想出的:

SELECT
  REPLACE(GROUP_CONCAT(IF(f.id = f.id,u.fname, NULL)), ',', ' & ') AS 'First Name'
FROM users AS u
JOIN family AS f 
  ON u.id = f.userid 
GROUP BY f.id;

感谢您在网站上解决我的问题!

【讨论】:

    【解决方案2】:

    您可以使用 INNER JOIN 在您的条件中使用族列:

    SELECT users.first_name 
        FROM users 
    INNER JOIN family 
        ON family.userID=users.ID 
    WHERE family.ID=:familyId;
    

    编辑: Soory 我是一个 PHP 人,所以 :familyId 应该被替换为您正在搜索的实际 familyID。 连接表时,您还可以使用连接表中的列作为条件,因此对于上述查询,只有在家庭表中具有提供的 familyID 的对应行的结果才会被选中。

    【讨论】:

    • 所以我尝试了你的说法,并得到错误代码:1064 靠近':familyId。如前所述,我将添加其他信息
    • 我不确定 where 子句在做什么,我尝试查找但主要是 php 的东西,认为我在语句中添加了一个变量。
    猜你喜欢
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 2018-05-17
    相关资源
    最近更新 更多