Union with a timediff statement in MySQL - mysql

Not sure I'm going about this correctly to begin with - I have two valid SQL select statements that I would like to run together.
The first is
SELECT * FROM mytable;
The second is
Select TIMEDIFF(time2,time1) as diff from mytable;
So I thought maybe
SELECT * FROM mytable UNION Select TIMEDIFF(time2,time1) as diff from mytable;
But of course, the second statement doesn't have the same number of columns because it isn't a separate table. Those of you awesome at this will be able to figure it out in no time, I am sure.

select TIMEDIFF(time2,time1) as diff, t.* from mytable t;
Is it what you want?

Related

How to SELECT COUNT(DISTINCT) and WHERE conditional on Ms.Access Query

I just wanted to simply count using where conditional and yet this query ask me for parameter instead of automatically execute the query
SELECT COUNT(ActDiscDischargingPort) from(
SELECT DISTINCT ActDiscDischargingPort FROM SelisihLoadVSActualLoadTable) WHERE SchLoadVessel LIKE "XB24 - MV. MEMPHIS" AND SchLoadVoyageNo LIKE "0019";
What is the proper way of writing this query?
Found the answer, turn out the query has to be like this
SELECT COUNT(ActDiscDischargingPort) from ( SELECT DISTINCT ActDiscDischargingPort FROM SelisihLoadVSActualLoadTable WHERE SchLoadVoyageNo LIKE "XB24 - MV. MEMPHIS" AND SchLoadVessel LIKE "0019" )
Every derived table must have its own alias.
The correct syntax would be
SELECT
COUNT(ActDiscDischargingPort)
from(
SELECT
DISTINCT ActDiscDischargingPort
FROM
SelisihLoadVSActualLoadTable
) AS T
WHERE
SchLoadVessel LIKE "XB24 - MV. MEMPHIS"
AND SchLoadVoyageNo LIKE "0019";
You can further speed up your query by optimizing it a bit.

MYSQL - calculated column aliases?

I want to have a SELECT statement name columns based on other column values.
Let's say I have a table with column names like q_1, q_2 and other columns like q_1_name and q_2_name
Right now we are doing something like
SELECT SUM(q_1), SUM(q_2) from mytable;
I'd like to get a result set with the columns named for the values in q_1_name and q_2_name
SELECT SUM(q_1) as (q_1_name), SUM(q_2) as (q_2_name) from mytable;
Any chance you know a way to do this?
You can use a simply alias AS
SELECT SUM(q_1) as q_1_name, SUM(q_2) as q_2_name from mytable;
or using a subselect
select t.q_1_name, t.q_2_name
from (
SELECT SUM(q_1) as q_1_name, SUM(q_2) as q_2_name from mytable
) t;

How do I execute a query using INSERT INTO and WITH statement?

INSERT INTO tablename( columnname1, columnname2, columnaname2)
WITH
a AS
SELECT * FROM tablename
WHERE condition
),
b AS
SELECT * FROM tablename
WHERE condition
)
I have a couple lines of query below where I use an DISTINCT statement but would like to know for now whether my query above is correct or not.
WITH? This is going to be introduced in MySQL 8.0. Are you using a preview release? Otherwise you won't be able to use WITH in MySQL.
Anyway: A WITH clause belongs at the beginning of the statement: WITH ... INSERT .... See here: https://dev.mysql.com/doc/refman/8.0/en/with.html.
It seems, however, you are not even using your CTEs a and b. Your CTEs are also lacking parentheses. Your statement should look something like this for instance:
WITH a AS (SELECT * FROM tablename WHERE condition)
, b AS (SELECT * FROM tablename WHERE condition)
INSERT INTO tablename(columnname1, columnname2, columnaname2)
SELECT col1, col2, col3 FROM a
UNION ALL
SELECT col1, col2, col3 FROM b;

Mysql Query from Two table

Is it possible to join Two queries of mysql in a query ??
Like:
select * from a + select * from b
So that I can use them in a single php loop.
If they have the same number of columns and the datatypes are the same in each column, then you can use a UNION or UNION ALL:
select *
from a
UNION ALL
select *
from b
If you provide more details about the tables, data, etc, then there might be another way of returning this data.
A UNION will return only the DISTINCT values, while a UNION ALL selects all values.
If this is the route that you need to take, and you still need to identify which table the data came from, then you can always create a column to identify which table the data is from , similar to this:
select *, 'a' TableName
from a
UNION ALL
select *, 'b' TableName
from b
This allows you to distinguish what table the data came from.
I think it is easier creating sql "variables" like:
select varA, varb from TableA, tableB;
and you can just play with values in PHP accessing properties.
That way you can take conditions in the query like:
select varA, varb from TableA, tableB where varA.id = varB.foreingId bla bla...
;)

mySQL: select * in combination with UNIX_TIMESTAMP

Right now I'm retrieving data from my database as follows:
SELECT id, UNIX_TIMESTAMP(cdate) as myunixdate, permalink, title FROM mytable
But I would like to do it as follows, but it doesn't work.
SELECT *, UNIX_TIMESTAMP(cdate) FROM mytable
My question is, how can I combine UNIX_TIMESTAMP without having to specify all the other fields?
Are you sure you didn't try this?
SELECT UNIX_TIMESTAMP(cdate), * FROM mytable
This won't work as the * has to come first:
SELECT *, UNIX_TIMESTAMP(cdate) FROM mytable
Aliasing it will make it easier to reference in your code:
SELECT *, UNIX_TIMESTAMP(cdate) AS cdate_timestamp FROM mytable
SELECT *, UNIX_TIMESTAMP(cdate) AS my_time_stamp FROM mytable
It works for me in MySQL 6,
Are you sure the second query is the one you really try?
What version of mysql do you use?