从值为X的多个表中选择值

时间:2013-05-28 04:02:48

标签: mysql sql

我正在尝试执行我认为对MySQL数据库进行非常简单的查询。这是我的表设置;

表1 - CMS_AccessLevels

  • ACCESSLEVEL
  • titleColor

表2 - CMS_Users

  • 用户ID
  • 用户名
  • USEREMAIL
  • userAvatar
  • userSignature
  • ACCESSLEVEL

我已经有了这个问题;

SELECT `titleColor` FROM `CMS_AccessLevels` WHERE `accessLevel` = (SELECT `accessLevel` FROM `CMS_Users` WHERE `userID` = 3)

这可以正常工作,并根据两个表中的titleColor匹配返回正确的accessLevel值。

现在,我想要做的还是从CMS_Users获取一些值。为简单起见,我们假设我只想获取一些值,因此我的结果集可能看起来像这样;

userID|username|userAvatar|accessLevel|titleColor
-------------------------------------------------
0     |Scott   |image.png | 6         |#FFFFFF

或作为PHP数组(如图所示,如果上表没有意义,您可以看到逻辑布局);

array('userID' => $result['userID'],
      'username' => $result['username'],
      'userAvatar' => $result['userAvatar'],
      'accessLevel' => $result['accessLevel'],
      'titleColor' => $result['titleColor'];

假设我想从 userID 获取userNameuserAvataraccessLevelCMS_Users,以及{{1来自 titleColor ,其中CMS_AccessLevels等于'3',记住CMS_Users.userIDCMS_AccessLevels.accessLevel 必须匹配

实际上,在运行查询之前我知道的唯一数据是CMS_Users.accessLevel

是否可以使用单个查询执行此操作?

2 个答案:

答案 0 :(得分:1)

您正在使用子查询,而联接将是正确的选择。您可以尝试类似

的内容
SELECT a.titleColor AS titleColor, u.username AS username FROM CMS_users u INNER JOIN CMS_AccessLevels a ON u.accessLevel = a.accessLevel WHERE u.userID = '3'

答案 1 :(得分:1)

试试这个:

SELECT u.userID, u.username, u.userAvatar, u.accessLevel,  al.titleColor
FROM CMS_AccessLevels al
INNER JOIN CMS_Users u
ON u.accessLevel = al.accessLevel
WHERE u.userID = 3