Mysql 联合问题

Mysql 联合问题,mysql,Mysql,错误1222(21000):使用的SELECT语句的列数不同 做这项工作的正确版本是什么?要联合在一起的两个查询必须具有相同数量的输出列。第一次选择包含一列,第一次选择包含五列 如果愿意,可以使用空值填充第一个select,如中所示: mysql> select job_desc_title from postings where id=194582 -> union all -> se

错误1222(21000):使用的SELECT语句的列数不同


做这项工作的正确版本是什么?

要联合在一起的两个查询必须具有相同数量的输出列。第一次选择包含一列,第一次选择包含五列

如果愿意,可以使用空值填充第一个select,如中所示:

mysql> select job_desc_title from postings where id=194582
->                           union all
->                     select email_address,first_name,last_name,home_phone_area,home_phone_num from accounts
->                      left join profiles on profiles.account_id=accounts.id
->                      where accounts.id=5;

合并在一起的两个查询必须具有相同数量的输出列。第一次选择包含一列,第一次选择包含五列

如果愿意,可以使用空值填充第一个select,如中所示:

mysql> select job_desc_title from postings where id=194582
->                           union all
->                     select email_address,first_name,last_name,home_phone_area,home_phone_num from accounts
->                      left join profiles on profiles.account_id=accounts.id
->                      where accounts.id=5;

select job_desc_title from postings where id=194582
不会因为需要相同数量的列而合并

UNION用于将多个SELECT语句的结果合并到单个结果集中。 第一个SELECT语句中的列名用作返回结果的列名。在每个SELECT语句的相应位置列出的选定列应具有相同的数据类型。(例如,第一条语句选择的第一列的类型应与其他语句选择的第一列的类型相同。)

正如罗伯特·哈维(Robert Harvey)所说,可以在不匹配的行中添加空格

select email_address,first_name,last_name,home_phone_area,home_phone_num from accounts
但这将为每个匹配返回2行

更可能的情况是,假设一对一的关系,您希望将两个数据集合并成一行。

是的

select job_desc_title from postings where id=194582
不会因为需要相同数量的列而合并

UNION用于将多个SELECT语句的结果合并到单个结果集中。 第一个SELECT语句中的列名用作返回结果的列名。在每个SELECT语句的相应位置列出的选定列应具有相同的数据类型。(例如,第一条语句选择的第一列的类型应与其他语句选择的第一列的类型相同。)

正如罗伯特·哈维(Robert Harvey)所说,可以在不匹配的行中添加空格

select email_address,first_name,last_name,home_phone_area,home_phone_num from accounts
但这将为每个匹配返回2行


更可能的情况是,您希望将两个数据集合并成一行,假设为1:1的关系。

您从第一个数据集中选择工作描述标题,然后从第二个数据集中选择电子邮件地址、名字、姓氏等。这不是工会

你要做的是加入,我建议你仔细阅读这些。union接受两个查询的结果并垂直组合它们。联接获取两个表的结果并将它们水平合并。联合添加行,联合添加列。您要做的是添加列(作业描述标题),而不是行。合并行(即联合)需要使用相同的列

我还认为,当您应该使用内部联接时,您使用的是左联接

select 
    job_desc_title,
    '' AS email_address,
    '' AS first_name,
    '' AS last_name,
    '' AS home_phone_area,
    '' AS home_phone_num 
from 
    postings 
where id=194582
union
select 
    '' AS job_desc_title,
    email_address,
    first_name,
    last_name,
    home_phone_area,
    home_phone_num 
from 
    accounts

希望这能让你走上正轨。

你要从第一个标题中选择工作描述,然后从第二个标题中选择电子邮件地址、名字、姓氏等。这不是工会

你要做的是加入,我建议你仔细阅读这些。union接受两个查询的结果并垂直组合它们。联接获取两个表的结果并将它们水平合并。联合添加行,联合添加列。您要做的是添加列(作业描述标题),而不是行。合并行(即联合)需要使用相同的列

我还认为,当您应该使用内部联接时,您使用的是左联接

select 
    job_desc_title,
    '' AS email_address,
    '' AS first_name,
    '' AS last_name,
    '' AS home_phone_area,
    '' AS home_phone_num 
from 
    postings 
where id=194582
union
select 
    '' AS job_desc_title,
    email_address,
    first_name,
    last_name,
    home_phone_area,
    home_phone_num 
from 
    accounts

希望这会让你接近正确的轨道。

对。如有必要,可以添加假列。e、 g.从表1中选择第1、0、0列…我也要填充第二个选择。因为它会将工作描述标题与电子邮件地址结合起来。对。如有必要,可以添加假列。e、 g.从表1中选择第1、0、0列…我也要填充第二个选择。因为它会将工作描述标题与电子邮件地址结合在一起。我试图理解为什么你需要结合这些查询?其中一个产生的数据与其他数据几乎没有关系。也许这里有一个更好的问题可以问或回答?我想我是想说下面的Eric之类的话。这看起来像是应该合并的,而不是联合的。我正在试图理解为什么您需要合并这些查询?其中一个产生的数据与其他数据几乎没有关系。也许这里有一个更好的问题可以问或回答?我想我是想说下面的Eric之类的话。这看起来像是应该加入的东西,而不是联合起来的东西。
select 
    job_desc_title,
    '' AS email_address,
    '' AS first_name,
    '' AS last_name,
    '' AS home_phone_area,
    '' AS home_phone_num 
from 
    postings 
where id=194582
union
select 
    '' AS job_desc_title,
    email_address,
    first_name,
    last_name,
    home_phone_area,
    home_phone_num 
from 
    accounts
select 
    a.email_address,
    a.first_name,
    a.last_name,
    a.home_phone_area,
    a.home_phone_num,
    post.job_desc_title
from 
    accounts a
    inner join profiles p on 
        a.id=p.account_id
    inner join postings post on
        --I have no idea what the relationship is here, so I'm guessing
        p.posting_id = post.id
where 
    a.id=5