可以生成一个表列的值作为更多查询列的更多表的MYSQL查询吗?

时间:2018-11-23 14:25:30

标签: mysql sql

我有更多表,我想将它们合并在一起以生成CSV文件,供我们的后台系统读取。 我有一个包含产品信息的表,另一个包含语言信息的表。数据库构建如下例:

产品数据库:

<table>
    <tr>
        <td>id</td><td>productnumber</td><td>price</td><td>name_id</td>
    </tr>
    <tr>
        <td>1</td><td>ABC123</td><td>10.00</td><td>1</td>
    </tr>
    <tr>
        <td>2</td><td>DEF456</td><td>15.00</td><td>2</td>
    </tr>
</table>

名称数据库:

<table>
    <tr>
        <td>id</td><td>name_id</td><td>name</td><td>language_id</td>
    </tr>
    <tr>
        <td>1</td><td>1</td><td>Cheese</td><td>1</td>
    </tr>
    <tr>
        <td>2</td><td>1</td><td>Fromagi</td><td>2</td>
    </tr>
    <tr>
        <td>3</td><td>1</td><td>Kase</td><td>3</td>
    </tr>
    <tr>
        <td>4</td><td>2</td><td>Water</td><td>1</td>
    </tr>
    <tr>
        <td>5</td><td>2</td><td>Acqua</td><td>2</td>
    </tr>
    <tr>
        <td>6</td><td>2</td><td>Wasser</td><td>3</td>
    </tr>
</table>

语言数据库:

<table>
    <tr>
        <td>id</td><td>Language</td>
    </tr>
    <tr>
        <td>1</td><td>English</td>
    </tr>
    <tr>
        <td>2</td><td>Italian</td>
    </tr>
    <tr>
        <td>3</td><td>German</td>
    </tr>
</table>

我想要作为CSV文件输出的内容是这样的:
产品编号+价格+名称_EN +名称_IT +名称_DE

所以:
ABC123 | 10.00 |奶酪| Fromagi |加濑
DEF456 | 15.00 |水 。 |阿夸。 |瓦瑟

有没有办法实现这一目标?

如果您需要更多信息,请告诉我! 谢谢大家。
最好的问候,

Koen de Haan

2 个答案:

答案 0 :(得分:1)

您可以将名称表与Product表多次连接。

select p.id, p.productnumber, p.price, en.name, it.name, de.name
from Product p
  join Name en on en.name_id=p.name_id and en.language_id=1
  join Name it on it.name_id=p.name_id and it.language_id=2
  join Name de on de.name_id=p.name_id and de.language_id=3

为了将来,最好显示实际的表创建脚本而不是一些HTML代码。

答案 1 :(得分:1)

在我看来,您可以使用存储过程创建临时表,并将重新存储的文件注入文件:

DELIMITER //
CREATE PROCEDURE getyourstuff()
BEGIN

    DROP TEMPORARY TABLE IF EXISTS tmp_stuff;
    CREATE TEMPORARY TABLE tmp_stuff 
    SELECT your,sweet,request  from your database;

    -- write the into file ....
    SELECT * 
      INTO OUTFILE '/path/to/mystufffile.txt'
        FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
        LINES TERMINATED BY '\n'
      FROM tmp_stuff;

    -- if you wanna display the resault , if not remove the line below 
    SELECT * FROM tmp_stuff; 
END//
DELIMITER ;

,然后您可以最终调用getyourstuff:)

任何问题,随时:)