需要帮助编写MySQL查询

时间:2012-06-15 15:07:15

标签: mysql database search

我有一个包含客户信息,订单等的数据库。我需要运行一个查询,返回所有尚未下订单的客户。

相关表格:登录和订单

相关列:login.loginID,login.loginFirstName,login.loginLastName,login.loginEmailAddress AND orders.OrderuserID

所以基本上 - 在psuedocode中:比较表登录,在orders.OrderUserID下的orders表中匹配的列loginID。如果不存在匹配(如未放置任何订单),则输出用户的名字,姓氏和电子邮件地址。

我一直在绞尽脑汁,但对语言有一些实际问题。在谈到SQL时,我是N00B的重要时刻。

5 个答案:

答案 0 :(得分:2)

基本上它看起来像那样:

      SELECT l.login_id
        FROM login l
   LEFT JOIN orders o
          ON l.login_id = o.login_id
       WHERE o.login_id IS NULL

关键是使用LEFT JOIN和WHERE ... IS NULL条件。换句话说,您专门在login表中查找orders表中没有“扩展”信息的行。

这只是一般性描述,但我希望它对您构建特定于您的案例的大查询的过程有所帮助。 )

答案 1 :(得分:1)

select loginFirstName, loginLastName, loginEmailAddress 
from login
where loginID not in
    (select distinct OrderuserID from orders)

您也可以使用左连接:

select loginFirstName, loginLastName, loginEmailAddress 
from login left join orders on loginID = OrderuserID 
where OrderuserID is null

不确定哪个会执行得更快;试试看。第一个更容易理解,恕我直言。

编辑:“选择不同”意味着“返回该字段的唯一值集”。因此,第一个SQL中的子查询返回有订单的用户集(他们的ID)。如果用户有多个订单,DISTINCT会确保她的ID只返回一次。

答案 2 :(得分:0)

这应该这样做:

select *
from login l
left join orders o on l.loginId = o.OrderuserID
where o.OrderuserID is null

答案 3 :(得分:0)

尝试:

select login.loginFirstName, login.loginLastName, login.loginEmailAddress  
FROM login 
LEFT OUTER JOIN orders ON login.loginID = orders.OrderuserID 
WHERE orders.OrderuserID IS NULL;

或类似的东西。我怀疑较新的SQL用户的技巧是LEFT OUTER加入。如果没有该说明符,则连接仅返回第一个表中的行,如果第二个表中存在匹配项。这样你就可以得到它们(然后用IS NULL短语过滤掉匹配)。

答案 4 :(得分:0)

虽然你应该先自己尝试,然后你可以先搜索谷歌:) :)  无论如何,你可以这样使用它,

SELECT l.loginFirstName,l.loginLastName,
l.loginEmailAddress FROM login AS l LEFT JOIN orders as o 
ON l.loginID = o.OrderuserID where OrderuserID is NULL