Skip to main content

One more SQL hack (or How I Married a Genius)

Here's my problem.  I'm making the following SQL call from my application:

select a.*, b.* from foo a, bar b where a.[column]= b.[column]

I don't know on the application end what fields are in what table, and I don't know what field the join will be on -- that's all dynamic.

I need to know from looking at my result set which table each column came from.  The problem of course is that I can't (at least in mysql) because if you run a select with a *, you only get back column names as a headers.

After beating my head against it, and not coming up with a solution, I IMed my big brain DB team, Greg and Ellie, but they were both apparently at lunch.  Then I remembered at my new job we have a $50k/yr contract with MySQL for support, so I called them.

It took quite a while to explain to the 1st level of customer support what the problem was.  He kept insisting the answer was to use an "as", but I tried that long before I called, and it doesn't work. I had tried:

select a.* as foostuff, b.* as barstuff from foo a, bar b where a.[column]= b.[column]


in the hopes I would get back foostuff.id, foostuff.name,bar.id etc etc etc..  No joy.  It still gives you the same tableless headers.  Eventually 1st level customer support kicked it upstairs.  2nd level customer support called me within 1 minute of that happening.  Very impressive.

"It can't be done,"  He let me know.  "When you use the * you are telling the DB to not include table names."  Yes yes, I could use the metadata or information_schema to get around this, but I didn't want to do that because of all the extra junk it involves.

So I resigned myself to having to preload the metadata in the app, and write out more detailed queries.

Fortunately I married a genius, who having finally come back from lunch, within 5 minutes of me explaining the problems said

"select a.*, 1 as NEWTABLE, b.* from foo a, bar b where a.[column]= b.[column]"

GENIUS!  Now I know everything in the result set to the left of the NEWTABLE is a foo, and everything to the right is a bar!!!  GENIUS!!!

And considering I spent (much) less than $50k on the ring 8 years ago, is a real bargain in customer support!

Comments

--- said…
That's hilarious and a nice hack ;)

Popular posts from this blog

Preventing accidental large deletes.

Instructions for Developers on Using the safe_delete Stored Procedure To enhance safety and auditability of delete operations within our databases, we have implemented a controlled deletion process using a stored procedure named safe_delete . This procedure relies on a temporary table ( temp_delete_table ) that lists complete records intended for deletion, not just their IDs. This approach helps prevent accidental deletions and provides a traceable audit log of delete actions. Why We Are Doing This Controlled Deletions : Centralizing delete operations through a stored procedure reduces the risk of erroneous or unauthorized deletions. Auditability : Using a temporary table to store complete records before deletion allows for an in-depth review and verification process, enhancing our ability to confirm and audit delete operations accurately. Security : Restricting direct delete permissions and channeling deletions through a specific proced...
 In software engineering, accumulating code behind a release wall is akin to gathering water behind a dam. Just as a dam must be built higher and stronger to contain an increasing volume of water, the more code we delay releasing, the more resources we must allocate to prevent a catastrophic flood—major bugs or system failures—while also managing the inevitable trickles—minor issues and defects. Frequent, smaller releases act like controlled spillways, effectively managing the flow of updates and reducing the risk of overwhelming both the system and the team. The ideal of ci/cd may not be achievable for all teams, but smaller and faster is always better.

October is Cyber Security Month

The President has declared October as Cybersecurity month.  It's not a bad idea -- just like you change the batteries in your smoke detectors once a year, maybe you should review your electronic vulbnerabilities? My top ten security tips: 1) Change your passwords.  You've had them too long, you use the same password in too many places.  Somewhere someone has hacked a site that has your username and password in plain text.  Now they are getting ready to try that username/password somewhere else.  Beat them to the punch. 2) Use a safe browser.  That means anything that's not Internet Explorer.   I prefer chrome. 3) Use 2 step verification for your email account.  If your email doesn't provide 2 step authentication consider switching. 4) Get a free credit report  and review it.  You are entitled to one free report a year.   BE VERY CAREFUL!  There are man scam sites that offer free credit reports.  Go through the s...