MySQL查询从1个表中获取行以及从其他表中获取where子句的特定列值

时间:2019-01-16 12:53:42

标签: mysql

我正在一个项目(带有自定义表的wordpress)上,其中有商人表和另一个带有“ merchant_meta”名称的表,以维护其他详细信息,例如上次登录,账单日期,令牌等,如以下屏幕截图所示

enter image description here

我有以下查询以获取所有商人

$merchants = $wpdb->get_results( "SELECT * FROM $table_name ORDER BY id DESC" );

但是,当我将其更改为following以获取last_login元密钥的值时,它将仅返回具有此字段值的商户。

$merchants = $wpdb->get_results( "SELECT wp_merchants.*,wp_merchant_meta.meta_value FROM wp_merchants LEFT JOIN wp_merchant_meta ON wp_merchant_meta.merchant_id = wp_merchants.id WHERE wp_merchant_meta.meta_key = 'last_login' ORDER BY id DESC" );

如何获取所有具有last_login值的商人?

2 个答案:

答案 0 :(得分:1)

竞争wp_merchant_meta.meta_key = 'last_login'是表并集的条件,应该在JOIN语句中

SELECT 
    wp_merchants.*,
    wp_merchant_meta.meta_value 
FROM wp_merchants 
LEFT JOIN wp_merchant_meta ON wp_merchant_meta.merchant_id = wp_merchants.id 
    AND wp_merchant_meta.meta_key = 'last_login'

答案 1 :(得分:1)

如果您想获得所有商人,无论它们是否具有last_login值,都需要删除WHERE子句,该子句会将您的LEFT JOIN变成{{ 1}}(请参见manual)并将该条件添加到INNER JOIN子句中,即

ON