简单查询以执行连接操作

时间:2013-07-04 07:20:43

标签: php mysql

我正在使用PHP为我的网页执行MySQL功能。

我有一张桌子

table name -> users

 uname     oname
  john      alex
  john      murray
  john      joseph
  john      ray

和另一张表

table name -> more_info

fname    lname         more
 alex     some name   some info
 murray     //           //
 joseph     //           //
 ray       //            //

我要做的是运行查询

检索与oname john

匹配的所有uname列值

如果uname = john

,则此语句成功检索oname列值
SELECT oname FROM users WHERE uname = 'john '

现在,基于之前检索的oname列值

,我想要一个这样的语句
SELECT * FROM more_info WHERE fname=oname // previos ones 

我猜它是JoininnerJoin,但不知怎的,我无法获得它的正确语法或任何其他简单查询来执行此操作。

我的方法

我想首先检索oname列值,然后在for循环中检索,根据返回的行数运行每个列的查询,但这种方法会占用我的服务器。

4 个答案:

答案 0 :(得分:1)

您可以通过简单的INNER JOIN

将两个查询合并为一个
SELECT * FROM more_info mi
INNER JOIN users u ON mi.fname = u.oname
WHERE u.uname = 'john'

如果more_info表中存在空值的可能性,那么您应该使用LEFT JOIN而不是INNER JOIN。否则没有必要。

答案 1 :(得分:1)

尝试此查询,

 SELECT * FROM `more_info` `i` INNER JOIN `users` `u` ON `i`.`fname`=`u`.`oname` WHERE `u`.`uname`="john"

答案 2 :(得分:1)

我认为以下查询将对您有帮助。

SELECT * FROM `more_info` WHERE `fname` = (SELECT `oname` FROM `users` WHERE `uname` = "john")

答案 3 :(得分:0)

SELECT * FROM users  A
INNER JOIN more_info B
    ON A.oname = B.fname
WHERE uname = 'john'

有关详细信息,请参阅the MySQL documentation on the JOIN syntax