【问题标题】:SQL select two tables with no similar entry and different number of columnsSQL选择两个表没有相似的条目和不同的列数
【发布时间】:2021-02-25 19:17:35
【问题描述】:

上下文:两个表中没有相互或相似的条目,并且列数不同。这些表之间唯一的共同点是:表 2 作为表 1 作为外键。

SELECT username, email 
FROM `table1`;

SELECT * 
FROM `table2` 
WHERE username = 'user1';

我想要这样的结果:

用户名:“姓名”,电子邮件:“anyemail@email.com”。 (表1)
column1:'value',column2:数字,column3:'value',column4,column5等(表2)。

有没有办法在一次调用数据库中收集这些信息?我确实尝试过使用 UNION 和一个 SELECT,但在这种情况下它不起作用。

谢谢。

【问题讨论】:

    标签: sql


    【解决方案1】:

    UNION 应该可以工作。

    对于表一中缺少的列,您应该输入带有列名的 NULL 值。

    SELECT username, email, NULL as Column3 
    FROM Table1
    UNION ALL
    SELECT column1, column2, column3 
    FROM Table2
    

    或者也尝试转换数据类型,以便它们匹配。

    SELECT CAST(username AS NVARCHAR(255) AS username, CAST(email AS NVARCHAR(255) AS email, CAST(NULL AS NVARCHAR(255) AS Column3
    FROM Table1
    UNION ALL
    SELECT CAST(column1 AS NVARCHAR(255) AS username, CAST(column2 AS NVARCHAR(255) AS email, CAST(column3 AS NVARCHAR(255) AS Column3
    FROM Table2
    

    【讨论】:

    • 感谢您的回答,但在我的情况下不起作用。当我使用你提到的 union 时,我得到这个结果 => username:henry, email: j.s@dd.fr, column3: null (table2 的第 1 列和第 2 列没有返回,我也需要它们)。但我猜是因为 UNION 在有一些相似之处时起作用。
    • 是的。这是我在 mysql => SELECT email, course, name, surname, NULL as unit_5 FROM account where id=90 UNION ALL SELECT unit_1, unit_2, unit_3, unit_4, unit_5 FROM cet where account_id=90;这是返回 => email:nab@hotmail.com, course:cet, name: nabil, surname: sas, unit_5: null 你可以注意到 unit_1 等没有返回。感谢您的调查和建议。
    • 第二个查询单独执行的结果是什么?
    • 我的第二个猜测是,必须声明数据类型。至少对于第二个表,使它们匹配并且不能隐式转换。选择 CAST(unit_1 AS NVARCHAR(150)) 作为用户名,...
    • 它为每个查询返回预期的结果。但事情是从我的后端我必须打两个电话。
    【解决方案2】:

    试试临时表: https://dev.mysql.com/doc/refman/5.7/en/create-table.html

    插入查询结果并发出 SELECT 请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-17
      • 2015-04-17
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多