Retrieving a row, with data from key-value pair table in MySQL

前端 未结 3 727
[愿得一人]
[愿得一人] 2020-12-17 06:50

I have two tables, one called customer and one called customer_attributes.

The idea is that the customer table holds core customer data, an

相关标签:
3条回答
  • 2020-12-17 07:32

    Try this:

    SELECT `customer`.*, `ca1`.`value1` AS `wedding_date`, `ca2`.`value1` AS `test` 
    FROM `customer` 
    LEFT JOIN `customer_attributes` AS `ca1` ON customer.customerID = ca1.customerID  AND ca1.key1='wedding_date'
    LEFT JOIN `customer_attributes` AS `ca2` ON customer.customerID = ca2.customerID AND ca2.key1='test'
    WHERE (customer.customerID = '58029') 
    

    Moving the 2 WHERE conditions on ca1/ca2 into the JOIN condition instead should sort it

    0 讨论(0)
  • 2020-12-17 07:34

    The the "key" tests in with the LEFT OUTER JOIN predicates, as such:

    SELECT `customer`.*, `ca1`.`value1` AS `wedding_date`, `ca2`.`value1` AS `test` 
    FROM `customer` 
    LEFT JOIN `customer_attributes` AS `ca1` ON customer.customerID = ca1.customerID 
       AND (ca1.key1 = 'wedding_date') 
    LEFT JOIN `customer_attributes` AS `ca2` ON customer.customerID = ca2.customerID 
       AND (ca2.key1 = 'test')
    WHERE (customer.customerID = '58029') 
    
    0 讨论(0)
  • 2020-12-17 07:38

    The reason rows are only returned is because of the tests in the WHERE clause. Any rows that do not have the correct key1 are ignored altogether - negating your LEFT JOIN.

    You could move the key1 tests to your JOIN conditions

    SELECT `customer`.*, `ca1`.`value1` AS `wedding_date`, `ca2`.`value1` AS `test` 
    FROM `customer` 
    LEFT JOIN `customer_attributes` AS `ca1` ON customer.customerID = ca1.customerID AND ca1.key1 = 'wedding_date'
    LEFT JOIN `customer_attributes` AS `ca2` ON customer.customerID = ca2.customerID AND ca2.key1 = 'test'
    WHERE (customer.customerID = '58029') 
    
    0 讨论(0)
提交回复
热议问题