【问题标题】:How to put two concat queries into the same table as two columns如何将两个连续查询作为两列放入同一个表中
【发布时间】:2013-01-21 08:38:06
【问题描述】:

我刚开始使用 MySQL,我在任何地方都找不到答案,可能是因为它不存在?

我想把这两个放在一个表中作为两列

SELECT CONCAT(Name, ' ',Category) as Pet_Name_and_Category
FROM Animal

SELECT CONCAT(firstname, ' ',lastname) as Customer_Name
From PetCustomer

所以我想要的表格看起来像:

Gary, Snail               Spongebob Squarepants

Sandy, Squirrel           Patrick Star

它们是同一个表中的两个单独的列。

【问题讨论】:

  • 这两个表是如何相互关联的?
  • INNER JOINUNION?
  • 这两个表不相关。它们是两个单独的表。
  • 我不认为我想要联合或内部连接。我只想要由 2 个字符串创建的 2 列,每个字符串来自 2 个不同的表。
  • 不要这样做!您将数据存储与数据检索和显示混淆了。 -(我有点失望,其他人没有指出这一点)

标签: mysql sql concat


【解决方案1】:

试试这个,

select Name || ' ' || Category from Animal
union
select firstname || ' ' || lastname from PetCustomer;

如果您想将这些作为单独的列,那么您可以使用它,

select Name || ' ' || Category as pet, firstname || ' ' || lastname as owner
from Animal, PetCustomer
where <join_condition_depending_on_table_structure>;

【讨论】:

    【解决方案2】:

    也许试试子查询:

    SELECT 
        (SELECT CONCAT(Name, ' ',Category) 
         FROM Animal 
         WHERE <column> = <search_argument>)  as Pet_Name_and_Category ,
        (SELECT CONCAT(firstname, ' ',lastname) 
         FROM PetCustomer 
         WHERE <column> = <search_argument>) AS Customer_Name
    FROM <first table>
    

    【讨论】:

    • 这仅在子查询都返回一行并且因此不能给出指定结果的情况下才有效。
    • 是的,子查询每行只能从主表返回一个结果。所以有 WHERE 条件你引用实际行,这就是为什么我把 .
    • 可以看到示例结果有2行,用这个查询是不可能的。
    【解决方案3】:

    您需要使用INNER JOIN,例如:

    SELECT 
        CONCAT(Name, ' ',Category) as Pet_Name_and_Category, 
        CONCAT(firstname, ' ',lastname) as Customer_Name
    FROM Animal 
        INNER JOIN PetCustomer ON Animal.Customer_id = PetCustomer.id
    

    连接语法取决于 2 个表的关联方式。换句话说

    你怎么知道“海绵宝宝”拥有“加里,蜗牛”?


    如果它们不相关,而您只想将它​​们彼此相邻显示,请使用 2 个单独的查询。 (PHP 中的示例)

    $animals = $db->query("SELECT CONCAT(Name, ' ',Category) as Pet_Name_and_Category FROM Animal");
    $customers = $db->query("SELECT CONCAT(firstname, ' ',lastname) as Customer_Name From PetCustomer");
    
    while (list($animal) = $animals->fetch_row() || list($customer) = $customers->fetch_row()) {
        echo $animal, "\t", $customer, "\n";
    }
    

    【讨论】:

    • 想到了这一点,但OP提到表格不相关。因此,不能使用上述连接。
    • @Orangecrush 错过了这一点,感谢您指出。我已经在我的答案中添加了一个示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    相关资源
    最近更新 更多