关于检索数据的SQL查询

时间:2017-10-26 13:21:26

标签: mysql sql

我有2个表,import pymysql connection = pymysql.connect(host='localhost',user='root',password='',db='test',cursorclass=pymysql.cursors.DictCursor) class DBHelper: def table_inputs(self, cityx): connection = self.connect() PLN = "**%s**" % cityx try: query = "SELECT PersonID, LastName, FirstName, Address, City FROM persons WHERE City like '%s'" %(PLN); with connection.cursor(pymysql.cursors.DictCursor) as cursor: cursor.execute(query) return cursor.fetchall() finally: connection.close() Users

Question

我想检索那些从未发布任何问题的用户。 我试着把它写成:

User(Login,password,DOB,Country,Email,Name) Login is the Primary Key
Questions(QuestionID, Date&Time, Question,Login) QuestionID is the primary key

这是正确的方法,因为我试图列出所有没有出现在问题表中的LoginID。因此,那些从未问过的人。谢谢

3 个答案:

答案 0 :(得分:2)

以下查询将起作用:

Select *from users
where login not in (select distinct login from questions);

<强>解释

如果您想了解用户的详细信息,则应撰写select *from users而不是select *from questions

现在,where login not in (select distinct login from questions);

此处,子查询返回已发布问题的所有登录ID,并且我们将显示登录ID为not in子查询返回的结果集的用户。

编辑:根据OP的要求提供进一步说明

让我们举个例子。我只会考虑相关的专栏。

用户:

Login | Name
--------------
 1    | A
--------------
 2    | B
---------------
 3    | C

<强>问题:

   QuestionID | Login
    --------------
     Q1       | 1
    --------------
     Q2       | 2
    ---------------
     Q3       | 2

因此,我们有3个用户登录ID为1,2&amp; 3.我们还有3个问题,它只有2个登录ID,名为1&amp; 2更不用说登录ID为2的用户问了两个问题。

因此,select distinct login from questions语句将1,2作为答案。

这意味着整个where子句如下所示:

   where login not in (1,2)

因此,我们的外部查询将仅显示登录用户3的信息。

希望它有所帮助!

答案 1 :(得分:1)

RequestManager manager;
Context context;
List<Gallery> galleryList;

public BaseAdapter(Context context, List<Gallery> galleryList, RequestManager glide) {
    this.context = context;
    this.galleryList = galleryList;
    this.manager = glide;
}

@Override
public void onBindItemViewHolder(final KolamViewHolder holder, final int itemPosition) {
    Log.e("BaseAdapter", galleryList.get(itemPosition).getImage());
    manager.load(galleryList.get(itemPosition).getImage()).asBitmap()
            .diskCacheStrategy(DiskCacheStrategy.RESULT)
            .into(new SimpleTarget<Bitmap>() {
                @Override
                public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                    holder.kolamImage.setImageBitmap(resource);
                    holder.progressBar.setVisibility(View.GONE);
                    Log.e("BaseAdapter", "Ready");
                    //click listener to pass the gallery image to the bot
                    holder.kolamImage.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            onItemClickListener.onItemClicked(galleryList.get(itemPosition));
                        }
                    });
                }
            });
}

您需要从用户开始,以获取所有不在问题中的人。

用户拥有所有用户,只询问有问题的用户。如果您从登录中输出所有不是问题的全部内容。

编辑:

您从用户中选择了Select * from users where not exists ( select 1 from Question where users.login = question.login) 在问题中的所有用户。

not exist引用外部选择登录,结果为1,因为它们在带有引用登录的问题中有行。 (尝试Select 1 from question where users.login = question.login - 您将获得与用户一样多的行,但不会使用“字段”获得1s。

只要(至少)报告一个1,部分select 1 from users就会排除显示此行。

您接受的答案会在问题中创建where not exists的唯一且不同的列表,并在login此列表中检查来自用户的login

罗马的很多方式:o)

其他方式是isaace`s声明:

not in

左外连接将左表中的所有内容与右表中的所有内容连接起来,即使没有匹配 - 然后WHERE只显示那些有Q.login == null的内容,表示没有匹配。 (keywourd OUTER可以省略,select * from users U left outer join questions Q on U.login = Q.login where Q.login is null

使用不同的执行计划运行不同的SQL,由于性能或内存原因,有时很多数据有时会做一件事而不是另一件事......

答案 2 :(得分:0)

这应该有效

select * from User u
left join Question q on q.Login = u.Login
where q.Login is null