Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MySQL中加入这些数据?_Mysql_Sql - Fatal编程技术网

如何在MySQL中加入这些数据?

如何在MySQL中加入这些数据?,mysql,sql,Mysql,Sql,如果我有这样一张桌子: 表格A: id| object | type 1 | greg | person 2 | mary | person 3 | jared | person 4 | kelly | person 5 | melissa | person 6 | william | person 7 | skiing | hobby 8 | biking | hobby id | husband | wife 1 | greg | mary 2 | jared | kelly 3 | wi

如果我有这样一张桌子:

表格A

id| object | type
1 | greg | person
2 | mary | person
3 | jared | person
4 | kelly | person
5 | melissa | person
6 | william | person
7 | skiing | hobby
8 | biking | hobby
id | husband | wife
1 | greg | mary
2 | jared | kelly
3 | william | kelly
id | female | hobby
1 | mary | skiing
2 | kelly | biking
id | a | b | link
1 | 1 | 2 | related
2 | 3 | 4 | related
3 | 6 | 4 | related
4 | 1 | 4 | related
5 | 2 | 7 | likes
6 | 4 | 8 | likes
表B

id| object | type
1 | greg | person
2 | mary | person
3 | jared | person
4 | kelly | person
5 | melissa | person
6 | william | person
7 | skiing | hobby
8 | biking | hobby
id | husband | wife
1 | greg | mary
2 | jared | kelly
3 | william | kelly
id | female | hobby
1 | mary | skiing
2 | kelly | biking
id | a | b | link
1 | 1 | 2 | related
2 | 3 | 4 | related
3 | 6 | 4 | related
4 | 1 | 4 | related
5 | 2 | 7 | likes
6 | 4 | 8 | likes
表C

id| object | type
1 | greg | person
2 | mary | person
3 | jared | person
4 | kelly | person
5 | melissa | person
6 | william | person
7 | skiing | hobby
8 | biking | hobby
id | husband | wife
1 | greg | mary
2 | jared | kelly
3 | william | kelly
id | female | hobby
1 | mary | skiing
2 | kelly | biking
id | a | b | link
1 | 1 | 2 | related
2 | 3 | 4 | related
3 | 6 | 4 | related
4 | 1 | 4 | related
5 | 2 | 7 | likes
6 | 4 | 8 | likes
是否有办法获得以下结果表:

表格

id| object | type
1 | greg | person
2 | mary | person
3 | jared | person
4 | kelly | person
5 | melissa | person
6 | william | person
7 | skiing | hobby
8 | biking | hobby
id | husband | wife
1 | greg | mary
2 | jared | kelly
3 | william | kelly
id | female | hobby
1 | mary | skiing
2 | kelly | biking
id | a | b | link
1 | 1 | 2 | related
2 | 3 | 4 | related
3 | 6 | 4 | related
4 | 1 | 4 | related
5 | 2 | 7 | likes
6 | 4 | 8 | likes
仅使用MySQL查询(/ies)

  • 逻辑基本上从表B和表B的所有行开始迭代
  • 当所选表格为
    TableB
    时,第三列为
    related
    ,当所处理表格为TableB时,第三列为
    likes
示例逻辑为:

查看
表格B
(丈夫)格雷格和妻子(玛丽)的第一行,它从表格a中查看格雷格位于第1行(id 1),玛丽位于第2行(id 2),并创建一个新表格,第一行为1 | 2


是否有一个查询可以执行一些连接,或者可以执行一些操作,而不必通过编程方式遍历TABLEB的所有行,然后遍历TABLEC的所有行以生成所需的表?

您需要使用
TABLEB将表
连接到
tablea
两次:

  • 一个用于丈夫
对象
,另一个用于
  • 一个用于妻子
  • 对象
    这样您就可以在同一行中获得丈夫和妻子的两个ID

    table C
    table A
    相同。然后使用
    UNION
    (隐式distinct)或
    UNION ALL
    合并两个结果集

    比如:

    SELECT
      (@rownum := @rownum + 1) AS id,
      sub.*
    FROM
    (
      SELECT 
        ah.id     AS a,
        aw.id     AS b,
        'related' AS link
      FROM tableb       AS b
      INNER JOIN Tablea AS ah ON ah.object = b.husband AND ah.type = 'person'
      INNER JOIN Tablea AS aw ON aw.object = b.wife    AND aw.type = 'person'
      UNION ALL
      SELECT
        a.id  AS a,
        a2.id AS b,
        'hobby'
      FROM tablec       AS c
      INNER JOIN tablea AS a  ON a.object  = c.female 
      INNER JOIN tablea AS a2 ON a2.object = c.hobby AND a2.type = 'hobby'
    ) AS Sub, (SELECT @rownum := 0) AS t;
    
    这将为您提供:

    | ID | A | B |    LINK |
    ------------------------
    |  1 | 1 | 2 | related |
    |  2 | 3 | 4 | related |
    |  3 | 6 | 4 | related |
    |  4 | 2 | 7 |   hobby |
    |  5 | 4 | 8 |   hobby |
    
    注意:

    • 此查询将只提供5行,其中您要查找的预期结果集为6。它缺少与
      4 | 1 | 4 |相关的行
      ,因为在
      表B
      中没有针对那些
      greg
      (id 1)和
      keyl
      (id 4)的条目。正如你在问题中解释的那样

    • 新列
      id
      是从结果集生成的自动增量id,它不是从表中选择的


    如果需要从此选择创建全新的表,请使用以下语法:

    CREATE TABLE Tabled
    AS
    SELECT ...
    ... -- the same previous select query
    
    您将有一个新的表
    table
    ,它的结构与此
    SELECT
    相同