我有两个SQL Server表作者,以及作者主键(AuthorID)是articles表中的外键以表示authors和articles表之间简单的一对多关系的文章.现在问题是,我需要根据名字,姓氏和传记列在authors表上发出全文搜索.全文搜索工作真棒和排名等等.现在我需要在搜索中添加一个标准,我需要从搜索中忽略所有非文章贡献者.为了实现这一点,我选择创建一个视图,其中所有贡献者都有文章并搜索此视图.所以我用这种方式创建了视图:
Create View vw_Contributors_With_Articles
AS
Select * from Authors
Where Authors.ContributorID
IN ( Select Distinct (Articles.ContributorId) From Articles)
Run Code Online (Sandbox Code Playgroud)
它工作但我真的不喜欢子查询的东西.连接获取了所有冗余的authorID,尝试了不同但不适用于传记列,因为它的类型是ntext.Group by不会为我做,因为我需要所有列而不是它们的任何聚合.
你们觉得怎么样?我怎样才能改善这个?
我遇到了以下代码的问题.类id为Long,B类id是嵌入式id,其中一个字段为A类.
DetachedCriteria dc = DetachedCriteria.forClass(A.class,"a").setProjection(Property.forName("a.id"));
Criteria cr= this.sessionFactory.getCurrentSession().createCriteria(B.class,"b").add(Subqueries.in("b.id.a.id", dc));
List<B> bb = cr.list();
Run Code Online (Sandbox Code Playgroud)
这给出了例外:
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
Run Code Online (Sandbox Code Playgroud)
但是这个:
List<Long> dd = this.sessionFactory.getCurrentSession().createCriteria(A.class,"a").setProjection(Property.forName("a.id")).list();
Criteria cr= this.sessionFactory.getCurrentSession().createCriteria(B.class,"b").add(Restrictions.in("b.id.a.id", dd));
List<B> bb = cr.list();
Run Code Online (Sandbox Code Playgroud)
作品.我究竟做错了什么?
我想创建一个虚拟列。
它由一列、一个子查询和固定字符串组成。
当前代码使用子查询作为字符串并且它没有被执行。
SELECT X.vname, X.id, CONCAT(X.vname, '..' ,SELECT T.id FROM T WHERE T.x_id=X.id LIMIT 1, '..', 'some_text') FROM xtable AS X
Run Code Online (Sandbox Code Playgroud)
结果如下: vname_value..SELECT T.id FROM T WHERE T.x_id=X.id LIMIT 1..some_text
如果我有 2 个表并想查找它们是否具有相同的数据,那么最直接的方法是什么MySQL?
我已经阅读了有关执行相关子查询的信息,UNION ALL但是该查询大约有 2 页(!),并且无法真正遵循它正在执行的操作。必须有更简单的方法。
即使是例如MySQL将表数据复制到文件并执行vimdiff(我不确定这是否可能 - 是吗? - 只是大声思考)。
更新
我只对表数据感兴趣,对结构不感兴趣。这是为了澄清由于我发表的一个模棱两可的评论
使用以下查询,
SELECT *
FROM product
WHERE sale_price IN(SELECT max(sale_price)
FROM product)
Run Code Online (Sandbox Code Playgroud)
返回指定 tablesale_price中 type 列中具有最大值的行。DECIMAL(35,2)product
是否可以使用EXISTS()可以返回相同结果的方式重写此查询-product表中的一行在列中具有最大值sale_price?
SELECT *
FROM product p
WHERE EXISTS(SELECT max(pp.sale_price)
FROM product pp
WHERE p.prod_id = pp.prod_id)
Run Code Online (Sandbox Code Playgroud)
像这样重写查询是不正确的,并根据与该表中每一行匹配的条件返回给定表中的所有行。
我必须在一个单元格中显示多个单元格值。所以我使用这个查询:
select LISTAGG(fc.DESCRIPTION, ';'||chr(10))WITHIN GROUP (ORDER BY fc.SWITCH_NAME) AS DESCRIP from "ORS".SWITCH_OPERATIONS fc
group by fc.SWITCH_NAME
Run Code Online (Sandbox Code Playgroud)
它工作正常。但是当我将它与我的主(完整)查询合并时,我得到的错误是:错误代码 1427,SQL 状态 21000:ORA-01427:单行子查询返回多于一行
这是我的完整查询:
SELECT
TRACK_EVENT.LOCATION,
TRACK_EVENT.ELEMENT_NAME,
(select COUNT(*) from ORS.TRACK_EVENT b where (b.ELEMENT_NAME = sw.SWITCH_NAME)AND (b.ELEMENT_TYPE = 'SWITCH')AND (b.EVENT_TYPE = 'I')AND (b.ELEMENT_STATE = 'NORMAL' OR b.ELEMENT_STATE = 'REVERSE'))as COUNTER,
(select COUNT(*) from ORS.SWITCH_OPERATIONS fc where TRACK_EVENT.ELEMENT_NAME = fc.SWITCH_NAME and fc.NO_CORRESPONDENCE = 1 )as FAIL_COUNT,
(select MAX(cw.COMMAND_TIME) from ORS.SWITCH_OPERATIONS cw where ((TRACK_EVENT.ELEMENT_NAME = cw.SWITCH_NAME) and (cw.NO_CORRESPONDENCE = 1)) group by cw.SWITCH_NAME ) as …Run Code Online (Sandbox Code Playgroud) 一个简单的SQL查询,但我无法让它工作.当我删除子查询时,该语句返回正确的数据,因此错误需要在子查询中.这是我到目前为止所得到的:
"SELECT s.*, (SELECT s.* FROM sites_photos WHERE sites_id = s.id)
FROM sites
AS s";
Run Code Online (Sandbox Code Playgroud)
提前致谢.
我有一个mysql表,至少有userId,wager.数据可以
userId = 1 wager = 10.00, userId = 2 wager = 5.00, userId = 3 wager = 1.00.
Run Code Online (Sandbox Code Playgroud)
我想运行一个带有userId param的select,它返回所有userId,它们是<=该用户的赌注所以如果userId = 2我以5.00或更低的投注返回所有其他用户.使用一个连接查询比这更多,但只需要一些帮助或最佳方法与上述
我试图找到其中至少有75%+类似组件的物品,我们有数千种产品.我的表有2列,Item和Component.例:
+------+-----------+
| Item | Component |
+------+-----------+
| AAA | screw |
| AAA | metal |
| AAA | bar |
| AAA | nut |
| ABC | screw |
| ABC | metal |
| ABC | bar |
| CAA | nut |
| CAA | cap |
+------+-----------+
Run Code Online (Sandbox Code Playgroud)
最终的结果我想获得3列.项目,项目2和百分比相似.所以看起来像:
+------+-------+-------------------+
| Item | Item2 | PercentageSimilar |
+------+-------+-------------------+
| AAA | ABC | 75% |
| AAA | CAA | 25% |
| ABC …Run Code Online (Sandbox Code Playgroud) 我编写了一个查询,返回日期实际上比上述日期早的记录.
Declare @DateFrom date
Set @DateFrom= '02/Oct/2019'
SELECT 1, Convert(varchar(11), AppliedDateTime, 106)
FROM [MC_Tenders].[dbo].[AppliedWorks]
Where
Convert(varchar, AppliedDateTime,106) >= Convert(varchar, @DateFrom,106)
Run Code Online (Sandbox Code Playgroud)
应用日期作为日期时间保存在表格中 2017-04-25 15:51:25.257