当前位置: 首页 > 面试题库 >

mysql使用来自另一个表的关系从表中订购数据

许俊风
2023-03-14
问题内容

我有2个表
商品 :有关商品的信息。项目具有“常规”或“数字”类型。

id | name | itemtype

CREATE TABLE IF NOT EXISTS `wares` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `itemtype` enum('usual','digital') NOT NULL DEFAULT 'usual',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

   INSERT INTO `wares` (`id`, `name`, `itemtype`) VALUES
    (1, 'ware1', 'usual'),
    (2, 'ware2', 'usual'),
    (3, 'ware3', 'usual'),
    (4, 'ware4', 'usual'),
    (5, 'ware5', 'usual'),
    (6, 'ware6', 'digital'),
    (7, 'ware7', 'usual'),
    (8, 'ware8', 'digital'),
    (9, 'ware9', 'usual'),
    (10, 'ware10', 'digital');

关系 :表与 餐具 物品之间的关系。某些类型"usual"为的项目与类型为的项目有关"digital"。并非所有项目都链接。

id_usualware | id_digitalware

CREATE TABLE IF NOT EXISTS `relations` (
  `id_usualware` int(11) NOT NULL,
  `id_digitalware` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `relations` (`id_usualware`, `id_digitalware`) VALUES
(1, 6),
(4, 8),
(7, 10);

http://sqlfiddle.com/#!2/2831a/13

我需要使用下面的表 关系* 排序从表 商品中 选择数据。如果类型的项与item有关系,则此数字项将跟随此结果。我如何使用MySQL做到这一点?

*"usual"``"digital"``"usual"

id | name  | itemtype
 1 | ware1 | 'usual'  
 6 | ware6 | 'digital'
 2 | ware2 | 'usual'
 3 | ware3 | 'usual'
 4 | ware4 | 'usual'
 8 | ware8 | 'digital'
 5 | ware5 | 'usual'
 7 | ware7 | 'usual'
 10| ware10| 'digital'
 9 | ware9 | 'usual'

问题答案:

以下内容应ids以正确的顺序获取:

select coalesce(r.id_digitalware, w.id)
from wares w left join
     relations r
     on r.id_digitalware = w.id
order by coalesce(r.id_usualware, w.id),
         (w.itemtype = 'usual') desc;

要获取完整的行,您需要另外一个join

select w2.*
from wares w left join
     relations r
     on r.id_digitalware = w.id left join
     wares w2
     on w2.id = coalesce(r.id_digitalware, w.id)
order by coalesce(r.id_usualware, w.id),
         (w.itemtype = 'usual') desc;

这是SQL Fiddle。



 类似资料:
  • 问题内容: 是否可以在带有子选择的mysql 5.0上运行UPDATE命令。 我要运行的命令是这样的: ISBN13当前存储为字符串。 这应该更新10k +行。 谢谢, 威廉 问题答案: 只需更改一下即可:

  • 问题内容: 我想知道是否有一种方法可以完全在sql中执行此操作: 注意: q1将返回约3万行。 有什么办法可以在直式sql中完成上述操作?要直接从一个表(基本上是原始数据表)中提取数据并插入到另一个表(基本上是已处理数据表)中? 问题答案:

  • 问题内容: 我有两个数据库,我想用另一个数据库表中的值更新一个表。我正在使用以下查询,但它不起作用。 我也尝试了以下查询,但它也不起作用: 问题答案: 更新1 根据您的评论,应成为联接的一部分。这是正确的: 您甚至可以添加来简化语句,

  • 我有四张桌子 城市 状态 City_Vendor 供应商 现在,如果我做这样的事情,我得到城市和state_id,但不是州名 这是我所做的,以获得在我看来并不理想的州… 我也希望得到状态名称,而不仅仅是state_id。做这件事最好的方法是什么?

  • 问题内容: 我想用另一个表中的数据更新mySql中的表。 我有两个表“ people”和“ business”。人员表通过称为“ business_id”的列链接到业务表。 必要的表结构,主键带有星号(表:列):人员: business_id, sort_order,email商业:* business_id,email 我想用人员表中的电子邮件更新业务表电子邮件列,如下所示(我知道我在这里遗漏了

  • 问题内容: 我想从一个表中读取所有数据,然后将一些数据插入到另一个表中。我的查询是 但我有一个错误 请帮我。 问题答案: 您可以使用INSERT … SELECT语法。请注意,您可以在SELECT部分​​中直接引用“ 1”。