Mysql 在sql中的字段之间订阅
我有一张有这些字段的表Mysql 在sql中的字段之间订阅,mysql,sql,Mysql,Sql,我有一张有这些字段的表 id,cid,cv 用这些数据 1,5,code 2,3,code4 3,3,cod2 1,4,code5 1,3,code4 ]想要选择id什么cid=5和cv=code,cid=3或4和cv=code 4。 我希望id=1。 我使用了此查询,但结果为0 SELECT id FROM table WHERE (cid='5' and cv='code') and (cid in ('3','4') and cv='code4') 抱歉,英语不好。试试这个(将父母之
id,cid,cv
用这些数据
1,5,code
2,3,code4
3,3,cod2
1,4,code5
1,3,code4
]想要选择id什么cid=5和cv=code,cid=3或4和cv=code 4。
我希望id=1。
我使用了此查询,但结果为0
SELECT id FROM table WHERE (cid='5' and cv='code') and (cid in ('3','4') and cv='code4')
抱歉,英语不好。试试这个(将父母之间的AND改为OR):
尝试此操作(将parenteses之间的AND更改为或):
您应该尝试使用
ORs
而不是ANDs
SELECT id
FROM table
WHERE (cid='5' and cv='code')
OR (cid in ('3','4') and cv='code4')
您应该尝试使用
ORs
而不是ANDs
SELECT id
FROM table
WHERE (cid='5' and cv='code')
OR (cid in ('3','4') and cv='code4')
我把这个放在(你可以从最后一个数字是51看出我转错了几圈)。我认为这就是所谓的“关键值”,我建议对这篇文章的标签进行编辑,但我认为你应该重新标记它以包含关键值。无论如何:与一行表示一件事的方法相比,这样的数据库很难查询——相反,一行表示一个属性。因此,如果你想知道什么“东西”具有某些属性,你必须将每件东西的属性粘贴在一行中。运行下面的查询,您将了解我的意思:
SELECT laptops.laptop, rams.termvalue as ramCount,
cpus.termvalue as cpusCount,
maker.termvalue as company
FROM (SELECT DISTINCT laptop FROM my_table) As Laptops
LEFT JOIN (SELECT laptop, termvalue FROM my_table
WHERE term = 'ram') AS rams
ON rams.laptop = laptops.laptop
LEFT JOIN (SELECT laptop, termvalue FROM my_table
WHERE term = 'cpu') AS cpus
ON cpus.laptop = laptops.laptop
LEFT JOIN (SELECT laptop, termvalue FROM my_table
WHERE term = 'company') AS maker
ON maker.laptop = laptops.laptop
如果您对这种类型的数据库提出了其他问题,您应该始终提到您使用的是“键/值”安排,这是不常见的,不是我们任何人所假设的
在您的fiddler示例中,您希望找到company=dell和cpu=2或ram=2,因此您可以通过将其括在括号中并给它一个别名来查询整个查询,如下所示:
SELECT * FROM (
SELECT laptops.laptop, rams.termvalue as ramCount,
cpus.termvalue as cpusCount,
maker.termvalue as company
FROM (SELECT DISTINCT laptop FROM my_table) As Laptops
LEFT JOIN (SELECT laptop, termvalue FROM my_table
WHERE term = 'ram') AS rams
ON rams.laptop = laptops.laptop
LEFT JOIN (SELECT laptop, termvalue FROM my_table
WHERE term = 'cpu') AS cpus
ON cpus.laptop = laptops.laptop
LEFT JOIN (SELECT laptop, termvalue FROM my_table
WHERE term = 'company') AS maker
ON maker.laptop = laptops.laptop
) as laps
WHERE company = 'dell' AND (cpuscount = 2 OR ramcount = 2)
我把这个放在(你可以从最后一个数字是51看出我转错了几圈)。我认为这就是所谓的“关键值”,我建议对这篇文章的标签进行编辑,但我认为你应该重新标记它以包含关键值。无论如何:与一行表示一件事的方法相比,这样的数据库很难查询——相反,一行表示一个属性。因此,如果你想知道什么“东西”具有某些属性,你必须将每件东西的属性粘贴在一行中。运行下面的查询,您将了解我的意思:
SELECT laptops.laptop, rams.termvalue as ramCount,
cpus.termvalue as cpusCount,
maker.termvalue as company
FROM (SELECT DISTINCT laptop FROM my_table) As Laptops
LEFT JOIN (SELECT laptop, termvalue FROM my_table
WHERE term = 'ram') AS rams
ON rams.laptop = laptops.laptop
LEFT JOIN (SELECT laptop, termvalue FROM my_table
WHERE term = 'cpu') AS cpus
ON cpus.laptop = laptops.laptop
LEFT JOIN (SELECT laptop, termvalue FROM my_table
WHERE term = 'company') AS maker
ON maker.laptop = laptops.laptop
如果您对这种类型的数据库提出了其他问题,您应该始终提到您使用的是“键/值”安排,这是不常见的,不是我们任何人所假设的
在您的fiddler示例中,您希望找到company=dell和cpu=2或ram=2,因此您可以通过将其括在括号中并给它一个别名来查询整个查询,如下所示:
SELECT * FROM (
SELECT laptops.laptop, rams.termvalue as ramCount,
cpus.termvalue as cpusCount,
maker.termvalue as company
FROM (SELECT DISTINCT laptop FROM my_table) As Laptops
LEFT JOIN (SELECT laptop, termvalue FROM my_table
WHERE term = 'ram') AS rams
ON rams.laptop = laptops.laptop
LEFT JOIN (SELECT laptop, termvalue FROM my_table
WHERE term = 'cpu') AS cpus
ON cpus.laptop = laptops.laptop
LEFT JOIN (SELECT laptop, termvalue FROM my_table
WHERE term = 'company') AS maker
ON maker.laptop = laptops.laptop
) as laps
WHERE company = 'dell' AND (cpuscount = 2 OR ramcount = 2)
在您的示例中,cv必须是='code',并且cv必须等于'code4'-对于任何一条记录,不能同时为这两个值。你不想在结果中出现“1,3,代码4”吗?与和的第二部分相匹配。但没有记录会同时是代码和代码4,对吗?我想要订阅的1,5,代码和1,3,代码4是1。例如,用户向我发布这个数据(5=>code),(3=>code4,4=>code4)以进行搜索。我在表中搜索,并在(3,4)中向用户ID发布cid=5和cv=code和cid和cv=code4。@MJH:但您所描述的应该是结果1和2,而不仅仅是结果1。假设id是产品,cid是属性的类别,cv是属性的值。您希望在类别5中选择属性值为“code”的产品,在类别3或4中选择值为“code4”的产品,并在您的示例中选择公司为“dell”且ram=2或cpu=2的笔记本电脑,cv必须是='code',cv必须等于'code4'-对于任何一条记录,不能两者都是。你不想在结果中出现“1,3,代码4”吗?与和的第二部分相匹配。但没有记录会同时是代码和代码4,对吗?我想要订阅的1,5,代码和1,3,代码4是1。例如,用户向我发布这个数据(5=>code),(3=>code4,4=>code4)以进行搜索。我在表中搜索,并在(3,4)中向用户ID发布cid=5和cv=code和cid和cv=code4。@MJH:但您所描述的应该是结果1和2,而不仅仅是结果1。假设id是产品,cid是属性的类别,cv是属性的值。您希望在类别5中选择属性值为“code”的产品,在类别3或类别4中选择值为“code4”的产品。如果我使用或,result contain id=2。我只想要id=1(对于本例)否,如果我使用OR,result contain id=2。我只想要id=1(对于本例)