【问题标题】:Complex mySQL Two Table Query复杂的mySQL两表查询
【发布时间】:2015-02-13 16:52:04
【问题描述】:

我有两个如下所示的表格

表一

ID  username  
1   johndoe  
2   mikeb

表2

ID  user_id     meta_key    meta_value  
23      1       my_pin      12345  
24      2       my_pin      67890 

我正在尝试编写一个将返回的 mySQL 查询

ID   username    my_pin  
 1   johndoe     12345  
 2   mikeb       67890 

我的方法是使用子查询,但它不起作用。

SELECT 
    ID, 
    (SELECT meta_value 
     FROM table1 
     WHERE meta_key = "my_pin"
       AND table1.ID = table2.user_id) as my_pin 
FROM 
    table1
INNER JOIN 
    table2 ON table1.ID = table2.user_id

这会失败,因为子查询返回多行。谁能指出我正确的方向?

编辑:附加信息

为了简化我的问题,我遗漏了一些细节(抱歉)。 表2有多个条目

表2

ID  user_id     meta_key    meta_value  
23      1       my_pin      12345  
24      2       my_pin      67890 
25      1       my_id       10011
26      2       my_id       10012

我需要查询返回

ID   username    my_pin  my_id
 1   johndoe     12345   10011
 2   mikeb       67890   10012

如果我使用“简单”连接,那么 WHERE 子句应该是什么样子?

【问题讨论】:

  • 您只需要定期加入即可。
  • 这是最基本的 JOIN 之一,不是复杂的查询。

标签: mysql subquery inner-join


【解决方案1】:

这是通过一个简单的JOIN 完成的:

SELECT t1.username, t2.meta_value AS my_pin
FROM table1 AS t1
JOIN table2 AS t2 ON t1.ID = t2.user_id
WHERE t2.meta_key = "my_pin"

您也可以通过加入子查询来做到这一点:

SELECT t1.username, t2.meta_value AS my_pin
FROM table1 AS t1
JOIN (SELECT user_id, meta_value
      FROM table2
      WHERE meta_key = "my_pin") AS t2
ON t1.ID = t2.user_id

【讨论】:

    【解决方案2】:

    加入这两个表将为您提供所需的所有信息,您可以使用WHERE 子句仅选择您需要的结果。

    SELECT ID, meta_value as my_pin
    FROM table1
    INNER JOIN table2
      ON table1.ID = table2.user_id
    WHERE table2.meta_key = "my_pin"
    

    【讨论】:

    • 为什么 OP 应该“尝试”?请向 OP(以及 SO 的未来访问者)解释您为什么这样做。
    • @JayBlanchard 谢谢你提醒我添加解释:)
    【解决方案3】:

    感谢回复的人。这是我想出的解决更新问题的方法。

    选择 t1.ID,t1.用户名, ( 选择元值 FROM t2.wp_usermeta WHERE meta_key = "my_id" AND user_id = t1.ID ) 作为 my_id, ( 选择元值 FROM t2.wp_usermeta WHERE meta_key = "my_pin" AND user_id = t1.ID ) 作为 my_pin 从表 1 作为 t1 INNER JOIN table2 AS t2 ON t1.ID = t2.user_id WHERE t2.meta_key = "my_pin"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-27
      • 2014-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多