说我有下表
user_table
id username
1 abc
2 def
3 ghij
courses_table
id title
1 csc
2 math
3 syn
user_courses
user_id course_id
2 1
1 3
2 3
Run Code Online (Sandbox Code Playgroud)
我想选择参加课程1和3的用户名,而不是至少1或3,我的意思是1和3
我尝试了以下mysql查询
SELECT DISTINCT u.* FROM user_table as u LEFT JOIN user_courses as uc ON uc.user_id = u.id WHERE uc.course_id = 1 AND uc.course_id=3;
SELECT DISTINCT u.* FROM user_table as u LEFT JOIN user_courses as uc ON uc.user_id = u.id WHERE uc.course_id IN (1,3);
SELECT DISTINCT u.* FROM user_table as u LEFT …Run Code Online (Sandbox Code Playgroud) 这个查询有什么问题:
WITH volcan AS (SELECT DISTINCT v.numturista
FROM viaje v, sitio s
WHERE v.numsitio = s.numsitio
AND s.tipo = 'Volcan'),
desierto AS (SELECT DISTINCT v.numturista
FROM viaje v, sitio s
WHERE v.numsitio = s.numsitio
AND s.tipo = 'Desierto')
SELECT DISTINCT pais
FROM turista
WHERE numturista IN (volcan INTERSECT desierto);
Run Code Online (Sandbox Code Playgroud)
它不应该等同于以下(因为WITH创建命名的SELECT查询):
SELECT DISTINCT pais
FROM turista
WHERE numturista IN (
(SELECT DISTINCT v.numturista
FROM viaje v, sitio s
WHERE v.numsitio = s.numsitio
AND s.tipo = 'Volcan')
INTERSECT
(SELECT DISTINCT v.numturista
FROM …Run Code Online (Sandbox Code Playgroud) sql postgresql common-table-expression intersect relational-division
有没有办法一起使用IN和AND?问题是我想使用一列将我的查询与多个值匹配.
SELECT * FROM product INNER JOIN values USING(product_id) WHERE value = "large" AND value = "short"
Run Code Online (Sandbox Code Playgroud)
问题是我不能使用IN子句,因为它在值之间定义为OR.
我需要使用与另一个表有许多关系的类别表来过滤我的查询.是否可以使用many2many关系过滤查询?
表res_partner有很多category_id与表相关的字段res_partner_category.res_partner,或者我们只是说合作伙伴可以有很多类别.我需要的是过滤res_partners表中有"business"或"retail"类别的表.如果它没有任何这些类别,则不应显示.
另外还有另一个领域,res_partner它category_value_ids与以下领域有one2many关系res_partners_category_value:
res_partner 有关系的以下字段:
category_id到res_partner_category(很多2)category_value_ids到res_partner_category_value(one2many)name (炭)res_partner_category 有关系的以下字段:
partner_ids到res_partner(很多2)name (炭)res_partner_category_value 有关系的以下字段:
category_group_id到res_partner_category(很多)category_id到res_partner_category(很多)object_id到res_partner(很多)但是,如果我尝试res_partner_category_value在SQL查询中使用表,我会收到错误,我无法在查询中使用它.
例如,如果有4个合作伙伴具有以下类别:
查询应返回第一,第二和第三个伙伴.
一个人告诉我,不可能像many2many关系这样过滤.所以我想知道它真的不可能或只是复杂吗?
编辑:
我发现还有一个表叫做res_partner_category_rel.我没有看到它,因为在Openerp管理界面中,您可以看到数据库的所有对象,该表未显示.您只能通过数据库直接看到它.所以我对这个"缺失"的表感到困惑:
res_partner_category_rel:
partner_id (many2one)category_id (many2one)我正在尝试构建一个可搜索的用户所使用的语言数据库.
例如我可能有
$john = array("english", "french", "spanish");
$jack = array("french", "spanish");
$jill = array("english", "spanish");
Run Code Online (Sandbox Code Playgroud)
我想将它们保存到MySQL数据库中,以便以后可以运行(伪代码)
SELECT * FROM users WHERE spoken_languages = "french" and "spanish"
Run Code Online (Sandbox Code Playgroud)
我知道如果我有speaks_english,speaks_french和speaks_spanish列,那么我可以搜索
SELECT * FROM users WHERE speaks_french = "true" and speaks_spanish = "true"
Run Code Online (Sandbox Code Playgroud)
但是每次遇到新语言时添加新列的可扩展性都不是很好.我考虑过像这样的桌子
john | english
john | french
john | spanish
jack | french
jack | spanish
jill | english
jill | spanish
Run Code Online (Sandbox Code Playgroud)
因为至少要回到用户所说的语言,我才能运行
SELECT * FROM spoken_languages WHERE user = "jack"
Run Code Online (Sandbox Code Playgroud)
但是为了搜索讲法语和西班牙语的人,我需要查询所有讲法语的用户,所有说西班牙语的用户然后计算交叉点.这似乎非常低效.
所以我问你,如何保存这些口语语言,以便我可以在不破坏服务器的情况下搜索数据库?
使用Postgres我有一个有conversations和的模式conversationUsers.每个conversation都有很多conversationUsers.我希望能够找到具有确切指定数量的对话conversationUsers.换句话说,提供了一个userIds(例如[1, 4, 6])我希望能够找到仅包含那些用户的对话的数组,而不是更多.
到目前为止,我试过这个:
SELECT c."conversationId"
FROM "conversationUsers" c
WHERE c."userId" IN (1, 4)
GROUP BY c."conversationId"
HAVING COUNT(c."userId") = 2;
Run Code Online (Sandbox Code Playgroud)
不幸的是,这似乎也回归了包括这两个用户在内的对话.(例如,如果对话还包括"userId"5 ,则返回结果).
我需要一个SQL语句来从数据库中提取具有附件标记的那些申请人.如果我想要7或8作为附件标签的aaplicant但是我需要具有这两个标签的申请人,则belowq语句可以正常工作.
select distinct(a.id) from applicant a
join applicantdeployment ad on a.id = ad.applicantid
join ApplicantAttachment at on a.id = at.applicantid
where a.applicanttype = 'TCN/LN' and ad.groundlocation in (4,8,14) and ad.deploymentstatus =1
and ad.trainingdeploymentstatus = 6 and at.tag in (7,8)
Run Code Online (Sandbox Code Playgroud)
例如,从下面的集合我只想要显示ids 7332,7451和7449.
ID Tag
7328 8
7328 8
7332 8
7332 7
7337 7
7449 8
7449 7
7451 8
7453 7
7451 7
谢谢!
我不知道如何表达我的 SQL 问题,所以我会输入一个预期的场景。
| 电影ID | 标签ID |
|---|---|
| 1 | 1 |
| 1 | 3 |
| 1 | 5 |
| 2 | 1 |
| 2 | 2 |
| 2 | 3 |
| 3 | 1 |
| 3 | 3 |
| 3 | 5 |
| 3 | 7 |
我想选择至少与所有这些标签有标签关系的 movieId [1,3,5]。
所以预期的输出是1,3.
我想选择满足同一列的两个条件的行.下面是表模式.
安全表
Id RoleId CompId SecurityToken Accesstype
1 1 10 abc 2
2 1 10 xyz 2
3 12 10 abc 2
4 16 12 abc 2
5 16 12 xyz 2
6 30 13 abc 2
7 1 10 efg 2
8 1 10 lmn 0
Run Code Online (Sandbox Code Playgroud)
我想要"每个RoleID/CompID组合的所有行,其中accesstype = 2,并且有一行包含securitytoken"abc"和包含SecurityToken"xyz"的行用于该角色/ compID组合"
输出应该是
Id RoleId CompId SecurityToken Accesstype
1 1 10 abc 2
2 1 10 xyz 2
4 16 12 abc 2
5 16 12 xyz 2
Run Code Online (Sandbox Code Playgroud) sql ×9
postgresql ×4
mysql ×3
php ×2
database ×1
intersect ×1
openerp ×1
sequelize.js ×1
sql-server ×1
t-sql ×1