我有两张桌子叫酒店和描述。描述表包含每个酒店的描述。
我想使用酒店表和描述表更新主表。对于Hotel表中的每一条记录,我应该在主表中插入一行。当我执行左外部联接时,Hotel表中的每个记录都会产生多个记录,因为一个Hotel有0个或更多的描述类型。
我想从描述表中为每个酒店选择一个描述,它不总是第一个描述。(如果是的话,我可以用这个)。相反,我有描述类型的优先顺序。首先,我需要检查是否有“一般”描述。如果有,那么这应该是主表的描述,而酒店的其余描述应该跳过。如果“常规”描述类型不可用,那么我想检查“位置”描述类型是否可用等等。
SELECT HOTEL_DETAILS.*,
Description.Desc_type,
Description.description
FROM
(SELECT Hotel.id,
Hotel.city_id,
Hotel.hotel_name,
City.country_code
FROM Hotel
LEFT OUTER JOIN City
ON Hotel.city_id=City.city_id
) HOTEL_DETAILS
LEFT OUTER JOIN Description
ON HOTEL_DETAILS.id =Description.id
AND HOTEL_DETAILS.city_id = Description.city_id
您可以使用sql中的CASE表达式为描述类型指定顺序,按此顺序排序,然后使用您提到的链接获得组中的第一个。类似下面的东西;
SELECT HOTEL_DETAILS.*,
CASE Description.Desc_type
WHEN 'general' THEN 0
WHEN 'location' THEN 1
WHEN 'rooms' THEN 2
WHEN 'lobby' THEN 3
ELSE 99
END desc_order,
Description.description
FROM
(SELECT Hotel.id,
Hotel.city_id,
Hotel.hotel_name,
City.country_code
FROM Hotel
LEFT OUTER JOIN City
ON Hotel.city_id=City.city_id
) HOTEL_DETAILS
LEFT OUTER JOIN Description
ON HOTEL_DETAILS.id =Description.id
AND HOTEL_DETAILS.city_id = Description.city_id
ORDER BY HOTEL_DETAILS.id, HOTEL_DETAILS.city_id, desc_order
我想问一下,是否有人只能从表A中选择值。请参阅下面的hibernate代码 现在,它就像从A、B和C中选择值,而且太多了。 谢谢你吉米
问题内容: 我试图从看起来像这样的数据库表结果中选择前2条记录 我试过这个查询 但是有些主题,例如失踪的地方,我什至尝试了以下链接的建议 如何选择每个组的前N行? 但是我为每个受检者得到两个以上 我究竟做错了什么? 问题答案: 您可以使用相关的子查询: 该查询通过串联三列来构造单列主键。如果您有真正的主键(如),则可以用代替。 SQL Fiddle中的示例。
问题内容: 是否有更好的方法从MySQL表中获取多个“前X个”结果?当不同的 foo 的数量很少时,我可以通过联合轻松地完成此操作: 我显然可以继续为foo的每个值添加联合。但是,当foo有500多个不同的值并且我需要每个值的前X个时,这是不切实际的。 问题答案: 这种查询可以用“每组最大n”来表述,您希望每个“组”的前10个得分为“ foo”。 我建议您看一下这个链接,它很好地处理了这个问题,从
问题内容: 我有一张桌子,我想在该表格的基础上从每个组中获取前N个项目。如果我设置了那将从每个组中选择第一行,或者如果我设置了那那将从每个组中选择前5行。请帮我。 问题答案: 有多种方法可以做到这一点。这是一个使用相关子查询的查询:
我正试图从数据库表中检索最后一条记录。我的查询如下: MID是员工id代码,主键是id。 因为主键(在我的例子中)是整数,并且在每次插入记录时自动递增,所以我试图在主键的基础上获取最后一条记录,因为与其他记录相比,最后一条记录将具有最高值的主键。 但是我不能制定如何给出条件指定最高值的主键。我需要添加主键,如下所示:
问题内容: 给定以下示例表架构 客户表 发票表 目的是选择InvoiceID值为10和20(非OR)的所有客户。因此,在此示例中,将返回带有CustID = 1和2的客户。 您将如何构造SELECT语句? 问题答案: 使用: 关键是需要计数等于子句中参数的数量。 的使用是在对帐务编号和发票编号的组合没有唯一约束的情况下- 如果没有重复的机会,则可以从查询中省略DISTINCT: