- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 3 个表:usuaris、versions 和 usuari_versio 用于关系:
id | usuari_id | versio_id | updated_at | created_at
以下查询由 laravel 生成,仅当电子邮件具有 UNIQUE 约束时关系的第一行具有 versio_id = 2 时才返回用户。
但是,如果我删除 UNIQUE 约束,查询将返回关系中任何 versio_id 的用户(根据需要)。
我还看到,如果我不使用电子邮件,而是使用 usuaris
.id
,这是 PK,与具有 UNIQUE 约束的电子邮件的结果相同。
select *
from `usuaris`
where
`usuaris`.`email` = 'mail@mail.com'
and exists (
select *
from `versions`
inner join `usuari_versio` on `versions`.`id` = `usuari_versio`.`versio_id`
where
`usuari_versio`.`usuari_id` = `usuaris`.`id`
and `versions`.`id` = 2
)
limit 1
我真的不明白为什么会这样。但是我需要在子查询返回 true 以及电子邮件(或 ID)匹配时获取用户。
谢谢。
编辑:
我尝试将子查询的“=”更改为“like”(没有 %),现在按预期工作:
...
and `versions`.`id` LIKE 2
...
如果我将“=”更改为电子邮件比较的“赞”,它也会起作用。
为什么会这样?
最佳答案
select *
from usuaris usu
where
usuaris.email = 'mail@mail.com' and
EXISTS (
select ver.id from versions ver inner join usuari_versio usuver
on ver.id = usuver.versio_id
where usuver.usuari_id = usu.id
and ver.id = 2
)
limit 1;
它表示您正在选择一个电子邮件仅为“mail@mail.com”的用户,并且如果 usuari_versio 在 versio_id 中具有版本 2,在 usuari_versio 中具有 usuari_id。如果只有一个电子邮件“mail@mail.com”,它可以返回。但是,如果您有多个“mail@mail.com”(不是唯一的),则可能是错误的。 Limit 1 表示它将选择第一个拥有该电子邮件的用户。
select *
from usuaris usu
where
usuaris.email = 'mail@mail.com
如果电子邮件不是唯一的或主键,则可以返回多行。
也许选择它的好方法可以是这样的(如果电子邮件是唯一的)
select *
from usuaris usu inner join usuari_versio usuver
on usuver.usuari_id = usu.id
inner join versions ver
on usuver.versio_id = ver.id
where
usu.email = 'mail@mail.com' and
ver.id = 2
LIMIT 1;
如果没有尝试用 usuaris pk 搜索
select *
from usuaris usu inner join usuari_versio usuver
on usuver.usuari_id = usu.id
inner join versions ver
on usuver.versio_id = ver.id
where
usu.email = 'mail@mail.com' and
ver.id = 2 and
usu.id = USUARISPK;
关于MySQL 5.7 : UNIQUE and exists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37875626/
我在 SQL 查询中使用了一个简单的 IF NOT EXISTS/WHERE NOT EXISTS 语句(我都尝试过),但我总是收到 mysql 错误,不知道为什么。尝试使用不同的引号,检查我的 My
我有 2 个表:tbl1 和 tbl2。我想从 tbl1 返回一行,其中包含以下列:col1、col2、col3、can_be_deleted 、有重要项目。这个想法是,can_be_deleted
如果您是 "t1".persona_1_id = 2,则预期结果应返回 persona_id = 4。 like --- id persona_1_id persona_2_id liked 1 2
我遇到了这个用于执行幂等插入的 github SQL 代码示例。完全按照我想要的方式工作。我不想使用 EXISTS,因为我觉得它有点困惑。可以使用联接对相同的操作进行编码吗? 下面是我在 github
public bool CheckTblExist(string TblName) { try { string cmTxt = "s
表1 Id Name DemoID 1 a 33 2 b 44 3 c 33 4 d 33 5 e 44 表2 Id DemoID IsT
我对 SQL 非常陌生。我想知道当我使用“IF EXISTS”或“IF NOT EXISTS”时会发生什么。例如:以下两个语句有什么区别: 语句 1:(存在) IF EXISTS( SELECT OR
我正在更新 exist-db 集合中的 XML 文件,我必须检查是否存在 id 以决定是否必须在我的文档中替换或插入某些内容。 我注意到随着文件的增长,查询执行时间显着恶化,我决定为我的文件添加一个索
我有一个正在尝试更新的数据库,但我不明白为什么会收到有关不存在的列的奇怪错误。当我使用“heroku pg:psql”访问数据库时,我完全可以看到该列。我找到了couple其他questions遇到类
我有一个这样的查询 SELECT ... FROM ... WHERE (SELECT EXISTS (SELECT...)) which did not return anything th
我有一个可以对数据库执行插入和更新的程序,我从 API 获取数据。这是我得到的示例数据: $uname = $get['userName']; $oname = $get['offerNa
我的批处理文件中有这个脚本 -- if not exist "%JAVA_HOME%" ( echo JAVA_HOME '%JAVA_HOME%' path doesn't exist) -
有没有办法让 Directory.Exists/File.Existssince 区分大小写 Directory.Exists(folderPath) 和 Directory.Exists(folde
考虑使用这两个表和以下查询: SELECT Product. * FROM Product WHERE EXISTS ( SELECT * FROM Codes
我正在使用 Subclipse 1.6.18 使用 Eclipse 3.72 (Indigo) 来处理 SVN 1.6 存储库。这一切都在 Ubuntu 下运行。 我有一个项目,在我更新我的 Ecli
我正在尝试使用 Terraform 配置 Azure 存储帐户和文件共享: resource "random_pet" "prefix" {} provider "azurerm" { versi
我有兴趣为需要使用 NOT EXISTS 的应用程序编写查询。子句来检查一行是否存在。 我正在使用 Sybase,但我想知道一般 SQL 中是否有一个示例,您可以在其中编写具有 NOT EXISTS
我正在尝试使用 Terraform 配置 Azure 存储帐户和文件共享: resource "random_pet" "prefix" {} provider "azurerm" { versi
下面是代码示例: CREATE TABLE #titles( title_id varchar(20), title varchar(80)
我曾经这样编写 EXISTS 检查: IF EXISTS (SELECT * FROM TABLE WHERE Columns=@Filters) BEGIN UPDATE TABLE SET
我是一名优秀的程序员,十分优秀!