如何从'SELECT *'语句中排除列?

时间:2017-07-26 14:05:54

标签: mysql sql database

所以想象一下,我有3个相关的表,每个表有10列,分别是用户设置活动日志。显然,users table会在其中包含id列作为主键,而settings tableactivitylogs table会有user_id列。运行下面的查询将返回表格idusers tableuser_idsettings列中的所有列,包括activitylogs列。

select * from users
  inner join settings on users.id = settings.user_id
  inner join on activitylog on users.id = activitylogs.user_id

问题在于我不希望在其他表上获得user_id列,并且我不想最终编写一个非常长的查询来指定我想要获取的所有列。所以我想我可以创建一个看起来像这样的查询

select all except id from users

也可以与连接一起使用。

select all except activitylogs.user_id, settings.user_id from users
  inner join settings on users.id = settings.user_id
  inner join activitylogs on users.id = activitylogs.user_id

实际上会返回除明确指定的列之外的所有列。

  • 我该怎么做?我的意思是我需要使用哪些编程语言,或者我需要编辑mysql的源代码或做类似的事情?
  • 这样做是否合法?因为我想在避免诉讼时这样做。

如果您有任何与此相关的内容,或者您​​可以将我指向与此相关的任何博客帖子,请执行此操作。

2 个答案:

答案 0 :(得分:1)

不幸的是,你的表结构没有这种方法可以删除mysql中的重复coloums。

虽然mysql提供了一种在使用连接时删除重复的coloums的方法。如果表中的coloum名称相同,则可以使用“Using”而不是“ON”进行连接。 “使用”删除了额外相同的coloum。请参阅以下网址了解更多详情: MySQL ON vs USING?

希望这会有所帮助!

答案 1 :(得分:0)

通常你会编写一个查询来只返回你想要的列,这样你就可以对结果进行更大程度的控制,即使是,这需要列出三十列 - 它;一次性成本,之后所有

考虑将来的更新可能会向用户表添加更多列,可能是存储了大量HTML的备注列,或者包含用户的编码图像的列,或扫描并保存的文档。使用您的方法(或通常选择*),您必须知道该查询的每次使用,并考虑该用例是否需要此附加数据,或者可能导致选择检索大量数据的性能问题实际上并不需要。