我有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。因此,那些从未问过的人。谢谢
答案 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