繁体   English   中英

基于不同行的值的SQL查询

[英]SQL Query based on value of a different row

我正在尝试从多个表中查询数据,但似乎无法实现这种JOIN类型。 例如,我有一个包含产品的表,以及一个包含各种用户元数据的wp_usermeta表:

产品表

Serial #     Product
---------------------
0001         A
0002         B
0003         C

wp_usermeta(简体)

User ID     Key         Value
--------------------------------
1           Serials     0001
1           Company     Company A
2           Serials     0001
2           Company     Company B
3           Serials     0001
3           Company     Company C

我需要根据他们拥有的序列号获得公司名称,例如:

Serial #      Company
-------------------------
0001          Company A
0002          Company B
0003          Company C

我已经能够通过简单的连接查询基于序列号检索用户ID,但是我不知道从那里去哪里。

SELECT products.serial_number, wp_usermeta.user_id FROM products LEFT JOIN wp_usermeta ON products.serial_number = wp_usermeta.meta_value

我不确定products表与您需要的结果有什么关系。

一种方法是“简单”自连接:

SELECT p.value as serial_number, c.value as Company.user_id
FROM wp_usermeta p JOIN
     wp_usermeta c
     ON p.user = c.user AND
        p.key = 'Serials' AND
        c.key = 'Company';

您需要像这样在wp_usermeta上进行2次加入:

SELECT Products.Serial, w2.Value AS Company 
FROM Products
# Detect User Id by serial number
JOIN wp_usermeta w1 ON w1.Key = 'Serials' 
    AND w1.Value = Products.Serial
# And select company by detected User Id
JOIN wp_usermeta w2 ON w2.Key = 'Company'
    AND w2.User = w1.User

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM