Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Truy vấn MySQL INNER JOIN với bí danh

Đối với trường hợp này, bạn có thể làm như thế này;) Chỉ cần một bảng xoay vòng đơn giản.

select
    users.id,
    users.slug,
    users.name,
    max(if(users_info.info_key = 'email', users_info.info_val, null)) as email,
    max(if(users_info.info_key = 'age', users_info.info_val, null)) as age
from users
inner join users_info
on users.id = users_info.parent
group by users.id

SQLFiddle DEMO TẠI ĐÂY

Nếu bạn có info_key động , bạn sẽ cần một sql động để làm điều này, ở đây tôi cung cấp cho bạn một mẫu.

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(if(users_info.info_key = ''',
      users_info.info_key,
      ''', users_info.info_val, null)) as ',
      users_info.info_key
    )
  ) INTO @sql
FROM users
inner join users_info
on users.id = users_info.parent
;

SET @sql = CONCAT('select users.id, users.slug, users.name, ', @sql, ' FROM users
inner join users_info group by users.id having email = \'[email protected]\'');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SQLFiddle DEMO TẠI ĐÂY



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thay thế tất cả các trường trong MySQL

  2. mysqli_real_escape_string và vấn đề dấu ngoặc kép

  3. Lỗi:R không thể kết nối với MySQL

  4. Hiển thị giá trị cột đơn của truy vấn mysqli

  5. Làm cách nào để bạn đặt một máy nhắn tin mặc định cho máy khách MySQL?