我有两个主要的表的数据库notes
和labels
.它们具有多对多关系(类似于stackoverflow.com对标签的问题).我想知道的是如何使用SQL搜索使用多个标签的笔记?
例如,如果我有一个带有三个标签"one","two"和"three"的注释"test",我有第二个注释"test2",标签为"one"和"two",那么SQL查询将是什么找到与标签"一"和"两"相关的所有音符?
假设我有一个列出项目和属性的表格,
frog green
cat furry
frog nice
cat 4 legs
frog 4 legs
Run Code Online (Sandbox Code Playgroud)
从items列我想选择具有绿色和4个腿属性的唯一对象.在这种情况下,我希望能够回到青蛙对象.执行此操作的最有效查询是什么?
我目前陷入困境.情景是这样的.我的产品可能与多个类别相关联.数据结构如下所示:
Products Table:
product_id name
1 Lemon
2 Kiwis
3 Cheese
Run Code Online (Sandbox Code Playgroud)
产品到类别表
product_id category_id
1 1
1 2
1 3
2 1
2 3
3 2
3 4
Run Code Online (Sandbox Code Playgroud)
类别表(在查询中不需要,但是在此处添加它以帮助可视化正在发生的事情)
category_id name
1 Fruit
2 Yellow
3 Round
4 Dairy
Run Code Online (Sandbox Code Playgroud)
我在这里苦苦挣扎的是,最初我想要获得所有水果类别的产品(类别ID 1),但我也想检查水果是否是黄色的.请记住,黄色不会是唯一的过滤器,有时我会想要返回黄色和橙色的水果,但是因为奶酪是黄色的,所以它不能归还,因为它不是水果.然而,为了让事情变得更容易,我总是知道我将把水果类作为基础.
数据库结构不能像opencart数据库结构那样改变.
以下是我的尝试:
SELECT GROUP_CONCAT(DISTINCT p2c2.category_id SEPARATOR ',') as categories
FROM oc_product_to_category p2c
LEFT JOIN oc_product p ON (p.product_id = p2c.product_id)
LEFT JOIN oc_product_to_category p2c2 ON (p.product_id = p2c2.product_id)
WHERE p2c.category_id IN ('1','2')
Run Code Online (Sandbox Code Playgroud)
这种作品除了它将返回奶酪的事实.
注意:我使用Group Concat,因为在所有这一切的最后,我的目标是返回与这些类别匹配的产品,但根据过滤器,我想从符合此条件的产品中返回另一个类别列表.所以:
场景:
获取符合类别标准的产品返回这些产品的类别.
任何帮助将不胜感激.
我有一个PostgreSQL数据库,用于将用户存储在users
表中,并将对话存储在conversation
表中.由于每个用户都可以参与多个对话,并且每个对话都可能涉及多个用户,因此我有一个conversation_user
链接表来跟踪哪些用户参与每个对话:
# conversation_user
id | conversation_id | user_id
----+------------------+--------
1 | 1 | 32
2 | 1 | 3
3 | 2 | 32
4 | 2 | 3
5 | 2 | 4
Run Code Online (Sandbox Code Playgroud)
在上表中,用户32只与用户3进行一次对话,另一次与3和用户4进行对话.如何编写一个查询,表明只有用户32和用户3之间有对话?
我尝试过以下方法:
SELECT conversation_id AS cid,
user_id
FROM conversation_user
GROUP BY cid HAVING count(*) = 2
AND (user_id = 32
OR user_id = 3);
SELECT conversation_id AS cid,
user_id
FROM conversation_user
GROUP BY (cid HAVING count(*) = 2
AND (user_id …
Run Code Online (Sandbox Code Playgroud) 我确信这个问题有一个答案,但我不喜欢我,因为我是SQL新手,不知道如何提问.
我有这样的数据(这只是简单的简写).这是一个postgres数据库.
table1
id value
1 111
1 112
1 113
2 111
2 112
2 116
3 111
3 122
3 123
4 126
5 123
5 125
6 111
6 112
6 116
table2
value
111
112
116
Run Code Online (Sandbox Code Playgroud)
我需要返回table1的id,其中table2中的所有值都存在于table1的值中.因此,对于此示例,我的查询将返回2和6.
在SQL中有什么办法吗?或者你可以引导我到一个允许我得到这个结果的数据结构吗?我可以更改任一表的结构,以满足获得此结果的最终需要
非常感谢.对此的答案是节省生命.
我有一个名为的连接表languages_services
基本上连接表services
和languages
.
我需要找到一个能够同时服务于ENGLISH (language_id=1)
和ESPANOL的服务(language_id=2)
.
table languages_services
------------------------
service_id | language_id
------------------------
1 | 1
1 | 2
1 | 3
2 | 1
2 | 3
Run Code Online (Sandbox Code Playgroud)
使用上面提供的数据,我想测试language_id=1 AND language_id=2
结果的样子
QUERY RESULT
------------
service_id
------------
1
Run Code Online (Sandbox Code Playgroud)
显然它不返回service_id = 2的那个,因为它不为Espanol提供服务.
任何提示都非常感谢!
我有这样的东西作为一个SQL表:
EmplID SkillID
1780 128
1780 133
2061 128
2068 128
假设我将字符串传递给存储过程,如'128,133'.我有一个split函数,所以sql可能如下所示:
SELECT DISTINCT EmplID
FROM EmplSkills
WHERE SkillID IN(SELECT data FROM dbo.Split(@Skills, ','))
Run Code Online (Sandbox Code Playgroud)
你可以很容易地看到,通过sql语句,我们将得到1780年,2061年和2068年.我真正想要的是获得那些EmplID,他们将128和133都作为技能ID,因此我应该只得到1780.
任何想法如何在没有一堆疯狂连接的情况下接近这个?
非常感谢.
我在这里给出了一个非常抽象的问题版本,所以请耐心等待.我有一个查询,将检查特定的主体是否具有相同类型的某些多个参数.例如,就巧克力而言,男孩有多种选择.但是,我想从桌子上选择那些我提到的巧克力的男孩.不仅不是更少,也不是'喜欢'或不'IN()'.
SELECT boy_id from boys_chocolates WHERE chocolate_id ONLY IN('$string');
Run Code Online (Sandbox Code Playgroud)
..当然'$ string'是一个PHP变量,包含逗号分隔值,只包含那些我想用来吸引男生的巧克力.
我知道这是无效的MySQL语句,但有没有任何有效的相当于此?
编辑:
这是更全面的查询,它在特殊情况下获取记录,但并非总是如此.
SELECT boys.* FROM schools_boys INNER JOIN boys ON boys.boy_id=schools_boys.boy_id
INNER JOIN chocolates_boys a ON a.boy_id=boys.boy_id INNER JOIN schools
ON schools.school_id=schools_boys.school_id WHERE a.chocolate_id IN(1000,1003)
AND
EXISTS
(
SELECT 1
FROM chocolates_boys b
WHERE a.boy_id=b.boy_id
GROUP BY boy_id
HAVING COUNT(DISTINCT chocolate_id) = '2'
)
GROUP BY schools_boys.boy_id HAVING COUNT(*) = '2'
Boys Table
+--------+-------------+
| id | boy |
+--------+-------------+
| 10007 | Boy1 |
| 10008 | …
Run Code Online (Sandbox Code Playgroud) SELECT c.name
FROM Customer c
WHERE NOT EXISTS(SELECT w.WID
FROM Woker w
WHERE NOT EXISTS(SELECT la
FROM look_after la
WHERE la.CID = c.CID
AND la.WID = w.WID));
Run Code Online (Sandbox Code Playgroud)
我不知道代码意味着什么...有谁能告诉我代码的作用?C是一名顾客,他将照顾一名工人.
我正在尝试优化我的SQL查询,以便我们不必在JVM上处理响应.
考虑我们有以下表格和条目:
+-----------+-------------+
| Column1 | Column2 |
+-----------+-------------+
|val11 |val21 |
|val11 |val22 |
|val11 |val23 |
|val12 |val21 |
|val12 |val24 |
+-----------+-------------+
Run Code Online (Sandbox Code Playgroud)
现在,我想执行一个查询,这将导致column1s的行映射到Column2s值val21,val22,val23.
类似于IN where子句的东西,但是,当IN where子句在IN子句的值之间搜索OR时,我想在这些值之间搜索AND.
对于IN where子句:
SELECT Column1 from table
WHERE Column2 IN (val21, val22, val23)
Run Code Online (Sandbox Code Playgroud)
将导致val11和val12(因为IN子句将检查val21或val22或val23的数据).
相反,我希望有一些查询,它将检查Column1与val11的所有三个val21,val22,val23的映射.
使用Informix DB.
sql ×8
mysql ×4
postgresql ×2
clause ×1
database ×1
group-concat ×1
informix ×1
inner-join ×1
join ×1
left-join ×1
many-to-many ×1
search ×1
select ×1