标签: sql-match-all

如何以多次通过关系过滤SQL结果

假设我有表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)

mysql sql postgresql relational-division sql-match-all

95
推荐指数
4
解决办法
2万
查看次数

选择满足不同行的不同条件的值?

这是一个我无法弄清楚的非常基本的查询....

假设我有一个像这样的两列表:

userid  |  roleid
--------|--------
   1    |    1
   1    |    2
   1    |    3
   2    |    1
Run Code Online (Sandbox Code Playgroud)

我想得到所有具有roleids1,2和3的不同用户ID .使用上面的例子,我想要返回的唯一结果是userid1.我该怎么做?

mysql sql relational-division sql-match-all

29
推荐指数
3
解决办法
1万
查看次数

在多方面,SQL一对多匹配ALL的一方

在以下一对多

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,"是")的所有源?

谢谢

sql sql-match-all

8
推荐指数
2
解决办法
9351
查看次数

使用未确定数量的参数时,如何避免动态SQL?

我有一个类似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)

这是功能性但硬编码.你会看到我设置它来寻找'颜色'和'饱和度'标签.

sql t-sql sql-server stored-procedures sql-match-all

7
推荐指数
1
解决办法
6054
查看次数

什么是用于选择项/属性列表中具有多个属性的项的SQL语句?

假设我有一个列出项目和属性的表格,

frog    green
cat     furry
frog    nice
cat     4 legs
frog    4 legs
Run Code Online (Sandbox Code Playgroud)

从items列我想选择具有绿色和4个腿属性的唯一对象.在这种情况下,我希望能够回到青蛙对象.执行此操作的最有效查询是什么?

sql relational-division sql-match-all

5
推荐指数
1
解决办法
8390
查看次数

在MySQL中选择多对多关系

我在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)

因此,每个位置都可以使用多个标记字进行标记,并且每个标记字都可以标记为多个位置.

我想要做的是只选择标有所有提供的标签名称的位置.例如:

我想要所有标有"树"和"秋千"的地点.应选择位置"公园",但不应选择位置"森林".

任何见解将不胜感激.谢谢!

mysql sql-match-all

5
推荐指数
1
解决办法
2394
查看次数

使用WHERE选择多行

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

php mysql sql-match-all

4
推荐指数
1
解决办法
670
查看次数

将INTERSECT语句翻译成MySQL

我有使用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)

任何人都可以帮我一把吗?

mysql sql sql-match-all

3
推荐指数
1
解决办法
621
查看次数

SQL查询问题

考虑两个table.Employee和Project.Employee表有像eid,ename这样的字段.项目表有像pid,pname.Now这样的字段,因为员工可以处理很多项目而且项目可以由很多员工完成,因此,很明显b/w两个表有多对多关系.打破多对多,并创建一个名为Assignment的新表,其中包含eid和pid的外键.

这就有一个问题,我想找出谁已经在超过1 project.For例如相互合作,如果EMP A和EMP乙双方相互在一个以上的项目工作的员工对那么他们有资格获得上述查询结果.

请告诉我对上述问题的查询.

sql database oracle sql-match-all

2
推荐指数
1
解决办法
393
查看次数

你能解决这个简单的SQL查询吗?

假设它是一个销售照相机的网站.这是我的实体(表格):

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)

以下是查询和预期结果:

  • 显示所有具有功能1,2和3的摄像机: C1
  • 显示所有具有1,2和4功能的摄像机: C2
  • 显示所有具有功能1和2的摄像机: C1,C2C3

这是我做的(它的工作原理,但它真的很难看,不想使用它):

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)

mysql sql relational-division sql-match-all

2
推荐指数
1
解决办法
239
查看次数

SQL选择条件问题

我有一个关于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以缩小结果范围.

sql t-sql sql-server sql-match-all

1
推荐指数
1
解决办法
400
查看次数

检查多列值

我正在尝试获取某些多个col2值的col1值.例如:我想看到col2的"1,2,3,4"值的col1值(在col1中为"1").col2的"1,2"的另一个例子:col1值是"1,2".我如何设法在SQL语法中执行此操作?

示例图片

mysql sql-match-all

1
推荐指数
1
解决办法
95
查看次数

如何查找每组中所有行都具有特定列值的行组

样本数据:

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 sql-server sql-match-all

0
推荐指数
1
解决办法
144
查看次数