首页 文章

根据两个表中的数据从两个MySQL表和ORDER中获取数据

提问于
浏览
0

我迷失了尝试将两个表连接在一起,然后返回两个表中的列排序的结果 . 这是我没有返回任何行的查询:

SELECT category.name,
       client.name,
       client.member
FROM   `category`,
       `client`
       INNER JOIN `client`
               ON client.name = category.name
WHERE  catdesc = '$info'
ORDER  BY client.member,
          category.name ASC

我想通过此查询返回的内容:

我想要一个名称列表(名称对两个表都是通用的)有一定的'catdesc'ORDEDED

首先:由按名称ASC排序的成员

然后

第二:在成员之后,非成员按名称ASC排序 .

2 回答

  • 3

    在查询中有三个表引用,至少需要为 client 表的一个引用赋予别名,否则,您将出现"ambiguous column"错误 .

    不要将old-school "comma" join运算符与 JOIN 关键字混合使用 . 最佳做法是对所有列引用进行限定,即使它们不含糊也是如此 .

    您当前的查询文本相当于:

    SELECT category.name
         , client.name
         , client.member
      FROM `category`
      JOIN `client`
      JOIN `client` 
        ON client.name = category.name
     WHERE catdesc ='$info' 
    ORDER BY client.member, category.name ASC
    

    我们期望抛出错误 . 我们真的希望看到更像的东西:

    SELECT category.name
         , client.name
         , client.member
      FROM `category`
      JOIN `client`
        ON client.name = category.name
     WHERE category.catdesc = '$info'
     ORDER
        BY client.member
         , category.name
    
  • 1

    您的联接查询不正确

    SELECT 
    category.name, 
    client.name, 
    client.member 
    FROM `category`,
    `client` <----- here is the issue
    INNER JOIN `client` ON client.name = category.name 
    WHERE catdesc ='$info' 
    ORDER BY client.member, category.name ASC
    

    这应该是

    SELECT 
    category.name, 
    client.name, 
    client.member 
    FROM `category`
    INNER JOIN `client` ON client.name = category.name 
    WHERE catdesc ='$info' 
    ORDER BY client.member, category.name ASC
    

相关问题