簡體   English   中英

在MySQL中的兩個表中選擇查詢

[英]Select query in two tables in MySQL

我正在運行此查詢

select * from user_meta JOIN user ON user_meta.userid=user.userid where user_meta.userid=9

但這並不是我想要的,它返回多行。

我的一個表看起來像這個名字user_meta

umeta_id     userid      meta_key       meta_value
 1              9         mobile        123324
 2              9         address       some address
 3              9         city          some city
 4              9         country       some country
 5              9         occupation    some details
 6              9         website       someurl
 7              9         mobile        123324
 8              9         address       some address
 9              9         city          some city
 10             10        country       some country
 11             10        occupation    some details
 12             10        website       someurl

另一個表看起來像這個名字user

userid          username      fullname      email              role
  9             someuser       john Doe    123324@gmail.com    admin

如何讓它選擇查詢,以便可以從兩個表中獲取與userid 9相關的所有值,並使其看起來像這樣

期望的輸出:

userid          username      fullname      email              role      Mobile     address     city     country    occupation     website
  9             someuser       john Doe    123324@gmail.com    admin    123123     someaddres    Somecity    somecountry    some details    someurl

謝謝! (提前!)

SELECT 
    *
FROM
    user
        INNER JOIN
    user_meta ON user_meta.userid = user.userid
WHERE
    user.userid = 9

以上答案與您的初始要求有關。 但是根據你的新要求,它不能通過簡單的查詢完成,它需要是動態的,在這里我為你創建了演示,你可以使用這個

http://sqlfiddle.com/#!2/39861/2

SELECT * FROM user_meta um, user u WHERE um.userid = u.userid
select 
    user_meta.umeta_id,
    user_meta.userid,
    user_meta.meta_key,
    user_meta.meta_value,
    user.userid,
    user.username,
    user.fullname,
    user.email,
    user.role
from
    user_meta
        LEFT JOIN
    user ON user_meta.userid = user.userid
where
    user_meta.userid = 9

這很簡單:

select * from user_meta, user where user_meta.userid=9 
and user_meta.userid=user.userid

將它減少到一行的唯一真正方法是使用聚合函數

例如,在字段中對詳細信息進行分組

SELECT user.userid, user.username, user.fullname, user.email, user.role, GROUP_CONCAT(CONCAT_WS('-', user_meta.umeta_id, user_meta.meta_key, user_meta.meta_value))
FROM user_meta 
INNER JOIN user ON user_meta.userid=user.userid 
WHERE user_meta.userid=9
GROUP BY user.userid, user.username, user.fullname, user.email, user.role

如果您只想要user_meta表,則所有值都表示使用此值。

select meta.* from user_meta AS meta JOIN user AS us ON meta.userid=us.userid where meta.userid=9

如果您只想要用戶表,則所有值都表示使用此值。

select us.* from user_meta AS meta JOIN user AS us ON meta.userid=us.userid where meta.userid=9

如果你想要兩種方式都提到這樣的話

select 
    meta.umeta_id,
    meta.userid, // only one userid is enough
    meta.meta_key,
    meta.meta_value,
    us.username,
    us.fullname,
    us.email,
    us.role from user_meta JOIN
    user ON meta.userid = us.userid

SELECT * FROM USERS U INNER JOIN Meta_Users M ON U.userid = M.userid
在哪里U.userid = 9

為您提供所需的輸出(但這不靈活,如果您添加要輸出的更多詳細信息,則無需更改即可): -

SELECT user.userid, 
        user.username, 
        user.fullname, 
        user.email, 
        user.role, 
        mobile_meta.meta_value AS `Mobile`, 
        address_metameta_value AS `Address`, 
        city_metameta_value AS `City`, 
        country_metameta_value AS `Country`, 
        occupation_metameta_value AS `Occupation`, 
        website_metameta_value AS `Website`
FROM user
LEFT OUTER JOIN user_meta AS mobile_meta ON mobile_meta.userid=user.userid AND mobile_meta.meta_key = 'mobile'
LEFT OUTER JOIN user_meta AS address_meta ON address_meta.userid=user.userid AND address_meta.meta_key = 'address'
LEFT OUTER JOIN user_meta AS city_meta ON city_meta.userid=user.userid AND city_meta.meta_key = 'city'
LEFT OUTER JOIN user_meta AS country_meta ON country_meta.userid=user.userid AND country_meta.meta_key = 'country'
LEFT OUTER JOIN user_meta AS occupation_meta ON occupation_meta.userid=user.userid AND occupation_meta.meta_key = 'occupation'
LEFT OUTER JOIN user_meta AS website_meta ON website_meta.userid=user.userid AND website_meta.meta_key = 'website'
WHERE user.userid=9

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM