Ich versuche, zu bestimmen, wer noch nicht auf Abruf auf allen Samstagen im Jahr 2017 zwischen dem 1. Juli und 31. DezemberMySQL Doppel links zurück Gegenteil von den erwarteten Ergebnissen kommen
In MySQL gebucht hat, ich habe zwei Tabellen und 1 Ausblick: j3_aqi_userdata_v (Ansicht) j3_sv_apptpro3_requests (Tabelle) j3_oncall_calendar_dates (Tabelle)
ich brauche eine Liste aller Menschen von j3_aqi_userdata_v zu bekommen, die nicht auftauchen in j3_sv_apptpro3_requests. Ein einfacher linker Join sollte es tun, aber nicht so sehr. Warum kannst du fragen? Nun, ich muss auch einige Aussagen in der WHERE-Klausel hinzufügen, um Tage auszuschließen, die nicht Samstag, Jahre nicht im laufenden Jahr und Monate von Januar bis Juni sind.
ich folgendes haben, aber es ist der Rückkehr nur die Leute, die auf Abruf gebucht haben:
select
*
from
j3_aqi_userdata_v t1
left join (j3_sv_apptpro3_requests t2)
on (t1.id=t2.user_id)
left join j3_oncall_calendar_dates t3
on (t2.startdate=t3.db_date)
where
t3.saturday_flag = 'T'
and
t3.year=year(current_date)
and
t3.month >= 7
Wer weiß, was ich falsch mache?
Tabellenstrukturen:
j3_aqi_userdata_v
# Name Type Collation Attributes Null Default Comments Extra
1 id int(11) No 0
2 author varchar(400) utf8mb4_general_ci No
3 username varchar(150) utf8mb4_general_ci No
4 email varchar(100) utf8mb4_general_ci No
5 employeeid bigint(21) No 0
6 coach longtext utf8mb4_general_ci Yes NULL
7 geo longtext utf8mb4_general_ci Yes NULL
8 team longtext utf8mb4_general_ci Yes NULL
9 manager longtext utf8mb4_general_ci Yes NULL
10 country longtext utf8mb4_general_ci Yes NULL
j3_sv_apptpro3_requests
CREATE TABLE `j3_sv_apptpro3_requests` (
`id_requests` int(11) NOT NULL,
`user_id` int(11) DEFAULT NULL,
`operator_id` int(11) DEFAULT NULL,
`name` varchar(255) NOT NULL DEFAULT '',
`phone` varchar(20) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`resource` varchar(50) NOT NULL DEFAULT '',
`category` varchar(50) NOT NULL DEFAULT '',
`startdate` date DEFAULT NULL,
`starttime` time DEFAULT NULL,
`enddate` date DEFAULT NULL,
`endtime` time DEFAULT NULL,
`comment` varchar(255) DEFAULT NULL,
`admin_comment` varchar(255) DEFAULT NULL,
`request_status` varchar(20) DEFAULT 'new',
`payment_status` varchar(20) DEFAULT 'pending',
`show_on_calendar` char(3) NOT NULL DEFAULT '1',
`calendar_comment` varchar(200) NOT NULL DEFAULT '',
`calendar_category` int(11) DEFAULT NULL,
`calendar_calendar` int(11) DEFAULT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`cancellation_id` varchar(255) DEFAULT NULL,
`service` varchar(50) DEFAULT NULL,
`txnid` varchar(255) DEFAULT NULL,
`sms_reminders` varchar(10) DEFAULT 'No',
`sms_phone` varchar(50) DEFAULT NULL,
`sms_dial_code` varchar(4) DEFAULT '1',
`google_event_id` varchar(255) DEFAULT '',
`google_calendar_id` varchar(255) DEFAULT '',
`booking_total` decimal(10,2) DEFAULT '0.00',
`booking_deposit` decimal(10,2) DEFAULT '0.00',
`booking_due` decimal(10,2) DEFAULT '0.00',
`coupon_code` varchar(255) DEFAULT NULL,
`booked_seats` int(11) DEFAULT '1',
`booking_language` varchar(25) DEFAULT 'en-gb',
`credit_used` float(10,2) DEFAULT '0.00',
`payment_processor_used` varchar(30) DEFAULT 'None',
`manual_payment_collected` float(10,2) DEFAULT '0.00',
`last_change_operator` int(11) DEFAULT NULL,
`invoice_number` varchar(255) DEFAULT '',
`gift_cert` varchar(255) DEFAULT '',
`cancel_reason` varchar(255) DEFAULT '',
`loyalty_points` int(11) DEFAULT '0',
`checked_out` smallint(5) DEFAULT '0',
`checked_out_time` datetime DEFAULT NULL,
`ordering` smallint(5) DEFAULT '0',
`published` tinyint(3) UNSIGNED DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
ALTER TABLE `j3_sv_apptpro3_requests`
ADD PRIMARY KEY (`id_requests`),
ADD KEY `startdate` (`startdate`);
ALTER TABLE `j3_sv_apptpro3_requests`
MODIFY `id_requests` int(11) NOT NULL AUTO_INCREMENT;COMMIT;
j3_oncall_calendar_dates
CREATE TABLE `j3_oncall_calendar_dates` (
`id` int(11) NOT NULL,
`db_date` date NOT NULL,
`year` int(11) NOT NULL,
`month` int(11) NOT NULL,
`day` int(11) NOT NULL,
`quarter` int(11) NOT NULL,
`week` int(11) NOT NULL,
`day_name` varchar(9) NOT NULL,
`dayofweek` int(11) NOT NULL,
`month_name` varchar(9) NOT NULL,
`holiday_flag` char(1) DEFAULT 'F',
`saturday_flag` char(1) DEFAULT 'T'
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
ALTER TABLE `j3_oncall_calendar_dates`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `td_ymd_idx` (`year`,`month`,`day`),
ADD UNIQUE KEY `td_dbdate_idx` (`db_date`);
COMMIT;
Klingt für mich LINKSES wird ein INNER JOIN umgewandelt, weil JOIN aus der WHERE-Anweisung, um die WHERE-Filter in die Klausel ON bewegen. 'ON (t2.startdate = t3.db_date) UND t3.saturday_flag = 'T' ....' –