SQL Query从表中获取结果

时间:2017-03-12 08:30:15

标签: mysql sql

非常感谢您的帮助。

我有一个包含2列service_id和artist_id的下表。主键是(service_id,artist_id)。我想检索一组服务ID的所有艺术家。

Sample Table : 

service_id   artists_id
5              9
6              9
5              10
1              9
5              1
6              1
6              7
1              10

我尝试了这个并且它不起作用,因为它给所有提供服务ID 5或服务ID 6或服务ID 1的艺术家。

SELECT artists_id FROM `service_schedule` WHERE service_id IN (5, 6, 1)

我想要提供服务ID 5和服务ID 6和服务ID 1的艺术家1.对于上面的示例表,只有艺术家9给出了集合中的所有3个服务(5,6,1)。

所以如果我想要检索所有可以提供id为5和6以及1的服务的艺术家。我如何编写SQL查询?

4 个答案:

答案 0 :(得分:1)

试一试后,

<html>
<head>
<script>
$(function() {
    $('.go-btn').on('click', function() {
        var selected = $('#my-dropdown option:selected');
            $.ajax({    //create an ajax request to load_page.php
        type: "GET",
        url: "boxplot.html",             
        dataType: "html",   //expect html to be returned                
        success: function(response){                    
            $("#responsecontainer").html(response); 
            //alert(response);
        }

    });
        //alert(selected.val()); 
    });
});
</script>
</head>
<body>

some text
<button class="go-btn" type="submit">Go</button> 
<div id="responsecontainer">
<br><hr><br>
<h2>PCA Plot Distribution:</h2><br>
</body>
</html>

我正在获取所有大于1的artist_id,并且必须是5和6的service_id。

我希望这会有所帮助。

修改

select artist_id from table where service_id IN (5, 6) AND  
artist_id IN (select artist_id from table group by artist_id having count(*) > 1);

你可以得到,service_ids,如5,6或5,6,1,你只需要计算服务ID,然后用select artists_id from Sample where service_id IN (5, 6, 1) AND artists_id IN (select artists_id from Sample group by artists_id having count(*) > 2) group by artists_id; 代替2

修改

keep that value - 1

答案 1 :(得分:0)

试试这个:

SELECT DISTINCT(s1.artists_id) FROM service_schedule s1
JOIN service_schedule s2 ON s2.service_id = s1.service_id AND s2.artists_id  <> s1.artists_id
WHERE s1.service_id IN (5, 6, 1)

答案 2 :(得分:0)

这个问题对我来说并不是很清楚,但如果我清楚地理解了这个问题,那么解决方案是适合你的。

select s1.service_id, s1. artists_id 
from Sample s1 inner join Sample s2
on s1.artists_id = s2.artists_id 
where s2.service_id = 5 and s1.service_id = 6
union
select s1.service_id, s1. artists_id 
from Sample s1 inner join Sample s2
on s1.artists_id = s2.artists_id 
where s2.service_id = 6 and s1.service_id = 5

示例输出 - http://sqlfiddle.com/#!9/7b3a5/16

答案 3 :(得分:0)

您必须按查询使用分组:

arist_id
当条件为真时,

service_id将被评估为1,并且您想要检查每个artist_id是否为3(提供所有三项服务 - DynamoDBRangeKey@DynamoDBRangeKey private String empId; 是唯一的,所以不需要在这里检查重复的行)