假设我有表student,club以及student_club:
student {
id
name
}
club {
id
name
}
student_club {
student_id
club_id
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何找到足球(30)和棒球(50)俱乐部的所有学生.
虽然这个查询不起作用,但它是我迄今为止最接近的事情:
SELECT student.*
FROM student
INNER JOIN student_club sc ON student.id = sc.student_id
LEFT JOIN club c ON c.id = sc.club_id
WHERE c.id = 30 AND c.id = 50
Run Code Online (Sandbox Code Playgroud) 这是一个我无法弄清楚的非常基本的查询....
假设我有一个像这样的两列表:
userid | roleid
--------|--------
1 | 1
1 | 2
1 | 3
2 | 1
Run Code Online (Sandbox Code Playgroud)
我想得到所有具有roleids1,2和3的不同用户ID .使用上面的例子,我想要返回的唯一结果是userid1.我该怎么做?
在以下一对多
CREATE TABLE source(id int, name varchar(10), PRIMARY KEY(id));
CREATE TABLE params(id int, source int, value int);
Run Code Online (Sandbox Code Playgroud)
其中params.source是source.id的外键
INSERT INTO source values(1, 'yes');
INSERT INTO source values(2, 'no');
INSERT INTO params VALUES(1,1,1);
INSERT INTO params VALUES(2,1,2);
INSERT INTO params VALUES(3,1,3);
INSERT INTO params VALUES(4,2,1);
INSERT INTO params VALUES(5,2,3);
INSERT INTO params VALUES(6,2,4);
Run Code Online (Sandbox Code Playgroud)
如果我有一个参数值列表(比如[1,2,3]),我如何找到SQL中列表中所有值(源1,"是")的所有源?
谢谢
我有一个类似StackOverflow的标记系统,用于我正在处理的数据库.我正在编写一个存储过程,该过程根据WHERE子句中未确定数量的标记查找结果.可以有0到10个标签之间的任何位置来过滤结果.例如,用户可能正在搜索标记为"apple","orange"和"banana"的项目,并且每个结果必须包含所有3个标记.我的查询变得更加复杂,因为我还在处理标记的交叉引用表,但出于这个问题的目的,我不会讨论.
我知道我可以做一些字符串操作并为exec()函数提供一个查询来处理这个问题,但我宁愿不解决与动态SQL相关的性能问题.我认为最好是SQL缓存存储过程的查询计划.
在这种情况下,您使用了哪些技术来避免动态SQL?
根据大众需求,这是我正在使用的查询:
SELECT ft.[RANK], s.shader_id, s.page_name, s.name, s.description, s.download_count, s.rating, s.price FROM shader s
INNER JOIN FREETEXTTABLE(shader, *, @search_term) AS ft ON s.shader_id = ft.[KEY]
WHERE EXISTS(SELECT tsx.shader_id FROM tag_shader_xref tsx INNER JOIN tag t ON tsx.tag_id = t.tag_id WHERE tsx.shader_id = s.shader_id AND t.tag_name = 'color')
AND EXISTS(SELECT tsx.shader_id FROM tag_shader_xref tsx INNER JOIN tag t ON tsx.tag_id = t.tag_id WHERE tsx.shader_id = s.shader_id AND t.tag_name = 'saturation')
ORDER BY ft.[RANK] DESC
Run Code Online (Sandbox Code Playgroud)
这是功能性但硬编码.你会看到我设置它来寻找'颜色'和'饱和度'标签.
假设我有一个列出项目和属性的表格,
frog green
cat furry
frog nice
cat 4 legs
frog 4 legs
Run Code Online (Sandbox Code Playgroud)
从items列我想选择具有绿色和4个腿属性的唯一对象.在这种情况下,我希望能够回到青蛙对象.执行此操作的最有效查询是什么?
我在MySQL数据库中有两个表,Locations和Tags,以及第三个表LocationsTagsAssoc,它们将两个表关联起来并将它们视为多对多关系.
表结构如下:
Locations
---------
ID int (Primary Key)
Name varchar(128)
LocationsTagsAssoc
------------------
ID int (Primary Key)
LocationID int (Foreign Key)
TagID int (Foreign Key)
Tags
----
ID int (Primary Key)
Name varchar(128)
Run Code Online (Sandbox Code Playgroud)
因此,每个位置都可以使用多个标记字进行标记,并且每个标记字都可以标记为多个位置.
我想要做的是只选择标有所有提供的标签名称的位置.例如:
我想要所有标有"树"和"秋千"的地点.应选择位置"公园",但不应选择位置"森林".
任何见解将不胜感激.谢谢!
PID VALUE
3 1
4 3
1 9
1 3
Run Code Online (Sandbox Code Playgroud)
如何选择同时具有值3和9的行?我试过了
从表中选择PID,其中VALUE = 3且VALUE = 9
所以我得到类似下面的东西,而不是我得到一个空集.
PID
1
Run Code Online (Sandbox Code Playgroud)
PID 4不应包含在结果中,因为它没有VALUE 9
我有使用INTERSECT的以下查询,我无法弄清楚如何使用INNER JOIN将其转换为MySQL.
SELECT DISTINCT Title, Variable FROM Table WHERE Location='Location1' AND Date='Date1'
INTERSECT
SELECT DISTINCT Title, Variable FROM Table WHERE Location='Location2' AND Date='Date2'
INTERSECT
SELECT DISTINCT Title, Variable FROM Table WHERE Location='Location3' AND Date='Date3'
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我一把吗?
考虑两个table.Employee和Project.Employee表有像eid,ename这样的字段.项目表有像pid,pname.Now这样的字段,因为员工可以处理很多项目而且项目可以由很多员工完成,因此,很明显b/w两个表有多对多关系.打破多对多,并创建一个名为Assignment的新表,其中包含eid和pid的外键.
这就有一个问题,我想找出谁已经在超过1 project.For例如相互合作,如果EMP A和EMP乙双方相互在一个以上的项目工作的员工对那么他们有资格获得上述查询结果.
请告诉我对上述问题的查询.
假设它是一个销售照相机的网站.这是我的实体(表格):
Camera: A simple camera
Feature: A feature like: 6mp, max resolution 1024x768,
Run Code Online (Sandbox Code Playgroud)
事情是相机和功能之间我有多对多的关系,所以我有一个额外的表:
camera -> cameras_features -> feature
Run Code Online (Sandbox Code Playgroud)
所以,查询很简单:
如何获得具有1,2和3功能的所有相机?
这就像构建位图索引一样.
您可以用来测试解决方案是否正常的数据
C1 has features 1,2,3
C2 has features 1,2,4
C3 has features 1,2
Run Code Online (Sandbox Code Playgroud)
以下是查询和预期结果:
这是我做的(它的工作原理,但它真的很难看,不想使用它):
SELECT * FROM camera c
WHERE c.id IN (
(SELECT c.id FROM camera c JOIN cameras_features f ON (c.id=f.camera_id)
WHERE f.feature_id=1)
q1 JOIN -- simple intersect
(SELECT c.id FROM camera c JOIN cameras_features …Run Code Online (Sandbox Code Playgroud) 我有一个关于select语句条件的快速问题.
我有下表包含以下项目.我需要得到的是与两个类型id匹配的对象id.
TypeId ObjectId
1 10
2 10
1 11
Run Code Online (Sandbox Code Playgroud)
所以我需要得到两个对象10因为它匹配类型id 1和2.
SELECT ObjectId
FROM Table
WHERE TypeId = 1
AND TypeId = 2
Run Code Online (Sandbox Code Playgroud)
显然这不起作用,因为它不会匹配同一行的两个条件.我该如何执行此查询?另请注意,我可以传入2个或更多类型ID以缩小结果范围.
我正在尝试获取某些多个col2值的col1值.例如:我想看到col2的"1,2,3,4"值的col1值(在col1中为"1").col2的"1,2"的另一个例子:col1值是"1,2".我如何设法在SQL语法中执行此操作?

样本数据:
ID1 ID2 Num Type
---------------------
1 1 1 'A'
1 1 2 'A'
1 2 3 'A'
1 2 4 'A'
2 1 1 'A'
2 2 1 'B'
3 1 1 'A'
3 2 1 'A'
Run Code Online (Sandbox Code Playgroud)
期望的结果:
ID1 ID2
---------
1 1
1 2
3 1
3 2
Run Code Online (Sandbox Code Playgroud)
请注意,我按ID1和ID2进行分组,但不是Num,我正在寻找专门针对Type ='A'的组.我知道通过在同一个表上连接两个查询是可行的:一个查询用于查找具有不同类型的所有组,另一个查询用于过滤具有Type ='A'的行.但我想知道这是否可以以更有效的方式完成.
我正在使用SQL Server 2008,我当前的查询是:
SELECT ID1, ID2
FROM (
SELECT ID1, ID2
FROM T
GROUP BY ID1, ID2
HAVING COUNT( DISTINCT Type ) = 1
) AS SingleType …Run Code Online (Sandbox Code Playgroud) sql-match-all ×13
sql ×10
mysql ×7
sql-server ×3
t-sql ×2
database ×1
oracle ×1
php ×1
postgresql ×1